!
function(t, e) {
  "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e(t.echarts = {})
} (this,
function(t) {
  "use strict";
  function e(t) {
    var e = {},
    n = {},
    i = t.match(/Firefox\/([\d.]+)/),
    r = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/),
    a = t.match(/Edge\/([\d.]+)/),
    o = /micromessenger/i.test(t);
    return i && (n.firefox = !0, n.version = i[1]),
    r && (n.ie = !0, n.version = r[1]),
    a && (n.edge = !0, n.version = a[1]),
    o && (n.weChat = !0),
    {
      browser: n,
      os: e,
      node: !1,
      canvasSupported: !!document.createElement("canvas").getContext,
      svgSupported: "undefined" != typeof SVGRect,
      touchEventsSupported: "ontouchstart" in window && !n.ie && !n.edge,
      pointerEventsSupported: "onpointerdown" in window && (n.edge || n.ie && n.version >= 11),
      domSupported: "undefined" != typeof document
    }
  }
  function n(t, e) {
    "createCanvas" === t && (df = null),
    cf[t] = e
  }
  function i(t) {
    if (null == t || "object" != typeof t) return t;
    var e = t,
    n = rf.call(t);
    if ("[object Array]" === n) {
      if (!R(t)) {
        e = [];
        for (var r = 0,
        a = t.length; a > r; r++) e[r] = i(t[r])
      }
    } else if (nf[n]) {
      if (!R(t)) {
        var o = t.constructor;
        if (t.constructor.from) e = o.from(t);
        else {
          e = new o(t.length);
          for (var r = 0,
          a = t.length; a > r; r++) e[r] = i(t[r])
        }
      }
    } else if (!ef[n] && !R(t) && !C(t)) {
      e = {};
      for (var s in t) t.hasOwnProperty(s) && (e[s] = i(t[s]))
    }
    return e
  }
  function r(t, e, n) {
    if (!M(e) || !M(t)) return n ? i(e) : t;
    for (var a in e) if (e.hasOwnProperty(a)) {
      var o = t[a],
      s = e[a]; ! M(s) || !M(o) || x(s) || x(o) || C(s) || C(o) || S(s) || S(o) || R(s) || R(o) ? !n && a in t || (t[a] = i(e[a], !0)) : r(o, s, n)
    }
    return t
  }
  function a(t, e) {
    for (var n = t[0], i = 1, a = t.length; a > i; i++) n = r(n, t[i], e);
    return n
  }
  function o(t, e) {
    for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
    return t
  }
  function s(t, e, n) {
    for (var i in e) e.hasOwnProperty(i) && (n ? null != e[i] : null == t[i]) && (t[i] = e[i]);
    return t
  }
  function l() {
    return df || (df = ff().getContext("2d")),
    df
  }
  function u(t, e) {
    if (t) {
      if (t.indexOf) return t.indexOf(e);
      for (var n = 0,
      i = t.length; i > n; n++) if (t[n] === e) return n
    }
    return - 1
  }
  function h(t, e) {
    function n() {}
    var i = t.prototype;
    n.prototype = e.prototype,
    t.prototype = new n;
    for (var r in i) i.hasOwnProperty(r) && (t.prototype[r] = i[r]);
    t.prototype.constructor = t,
    t.superClass = e
  }
  function c(t, e, n) {
    t = "prototype" in t ? t.prototype: t,
    e = "prototype" in e ? e.prototype: e,
    s(t, e, n)
  }
  function f(t) {
    return t ? "string" == typeof t ? !1 : "number" == typeof t.length: void 0
  }
  function d(t, e, n) {
    if (t && e) if (t.forEach && t.forEach === of) t.forEach(e, n);
    else if (t.length === +t.length) for (var i = 0,
    r = t.length; r > i; i++) e.call(n, t[i], i, t);
    else for (var a in t) t.hasOwnProperty(a) && e.call(n, t[a], a, t)
  }
  function p(t, e, n) {
    if (t && e) {
      if (t.map && t.map === uf) return t.map(e, n);
      for (var i = [], r = 0, a = t.length; a > r; r++) i.push(e.call(n, t[r], r, t));
      return i
    }
  }
  function g(t, e, n, i) {
    if (t && e) {
      if (t.reduce && t.reduce === hf) return t.reduce(e, n, i);
      for (var r = 0,
      a = t.length; a > r; r++) n = e.call(i, n, t[r], r, t);
      return n
    }
  }
  function v(t, e, n) {
    if (t && e) {
      if (t.filter && t.filter === sf) return t.filter(e, n);
      for (var i = [], r = 0, a = t.length; a > r; r++) e.call(n, t[r], r, t) && i.push(t[r]);
      return i
    }
  }
  function m(t, e, n) {
    if (t && e) for (var i = 0,
    r = t.length; r > i; i++) if (e.call(n, t[i], i, t)) return t[i]
  }
  function y(t, e) {
    var n = lf.call(arguments, 2);
    return function() {
      return t.apply(e, n.concat(lf.call(arguments)))
    }
  }
  function _(t) {
    var e = lf.call(arguments, 1);
    return function() {
      return t.apply(this, e.concat(lf.call(arguments)))
    }
  }
  function x(t) {
    return "[object Array]" === rf.call(t)
  }
  function w(t) {
    return "function" == typeof t
  }
  function b(t) {
    return "[object String]" === rf.call(t)
  }
  function M(t) {
    var e = typeof t;
    return "function" === e || !!t && "object" === e
  }
  function S(t) {
    return !! ef[rf.call(t)]
  }
  function T(t) {
    return !! nf[rf.call(t)]
  }
  function C(t) {
    return "object" == typeof t && "number" == typeof t.nodeType && "object" == typeof t.ownerDocument
  }
  function k(t) {
    return t !== t
  }
  function I() {
    for (var t = 0,
    e = arguments.length; e > t; t++) if (null != arguments[t]) return arguments[t]
  }
  function D(t, e) {
    return null != t ? t: e
  }
  function A(t, e, n) {
    return null != t ? t: null != e ? e: n
  }
  function L() {
    return Function.call.apply(lf, arguments)
  }
  function P(t) {
    if ("number" == typeof t) return [t, t, t, t];
    var e = t.length;
    return 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t
  }
  function O(t, e) {
    if (!t) throw new Error(e)
  }
  function E(t) {
    return null == t ? null: "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
  }
  function B(t) {
    t[pf] = !0
  }
  function R(t) {
    return t[pf]
  }
  function z(t) {
    function e(t, e) {
      n ? i.set(t, e) : i.set(e, t)
    }
    var n = x(t);
    this.data = {};
    var i = this;
    t instanceof z ? t.each(e) : t && d(t, e)
  }
  function F(t) {
    return new z(t)
  }
  function N(t, e) {
    for (var n = new t.constructor(t.length + e.length), i = 0; i < t.length; i++) n[i] = t[i];
    var r = t.length;
    for (i = 0; i < e.length; i++) n[i + r] = e[i];
    return n
  }
  function H() {}
  function V(t, e) {
    var n = new vf(2);
    return null == t && (t = 0),
    null == e && (e = 0),
    n[0] = t,
    n[1] = e,
    n
  }
  function W(t, e) {
    return t[0] = e[0],
    t[1] = e[1],
    t
  }
  function G(t) {
    var e = new vf(2);
    return e[0] = t[0],
    e[1] = t[1],
    e
  }
  function X(t, e, n) {
    return t[0] = e,
    t[1] = n,
    t
  }
  function q(t, e, n) {
    return t[0] = e[0] + n[0],
    t[1] = e[1] + n[1],
    t
  }
  function U(t, e, n, i) {
    return t[0] = e[0] + n[0] * i,
    t[1] = e[1] + n[1] * i,
    t
  }
  function Y(t, e, n) {
    return t[0] = e[0] - n[0],
    t[1] = e[1] - n[1],
    t
  }
  function j(t) {
    return Math.sqrt(Z(t))
  }
  function Z(t) {
    return t[0] * t[0] + t[1] * t[1]
  }
  function $(t, e, n) {
    return t[0] = e[0] * n[0],
    t[1] = e[1] * n[1],
    t
  }
  function Q(t, e, n) {
    return t[0] = e[0] / n[0],
    t[1] = e[1] / n[1],
    t
  }
  function K(t, e) {
    return t[0] * e[0] + t[1] * e[1]
  }
  function J(t, e, n) {
    return t[0] = e[0] * n,
    t[1] = e[1] * n,
    t
  }
  function te(t, e) {
    var n = j(e);
    return 0 === n ? (t[0] = 0, t[1] = 0) : (t[0] = e[0] / n, t[1] = e[1] / n),
    t
  }
  function ee(t, e) {
    return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]))
  }
  function ne(t, e) {
    return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])
  }
  function ie(t, e) {
    return t[0] = -e[0],
    t[1] = -e[1],
    t
  }
  function re(t, e, n, i) {
    return t[0] = e[0] + i * (n[0] - e[0]),
    t[1] = e[1] + i * (n[1] - e[1]),
    t
  }
  function ae(t, e, n) {
    var i = e[0],
    r = e[1];
    return t[0] = n[0] * i + n[2] * r + n[4],
    t[1] = n[1] * i + n[3] * r + n[5],
    t
  }
  function oe(t, e, n) {
    return t[0] = Math.min(e[0], n[0]),
    t[1] = Math.min(e[1], n[1]),
    t
  }
  function se(t, e, n) {
    return t[0] = Math.max(e[0], n[0]),
    t[1] = Math.max(e[1], n[1]),
    t
  }
  function le() {
    this.on("mousedown", this._dragStart, this),
    this.on("mousemove", this._drag, this),
    this.on("mouseup", this._dragEnd, this)
  }
  function ue(t, e) {
    return {
      target: t,
      topTarget: e && e.topTarget
    }
  }
  function he(t, e) {
    var n = t._$eventProcessor;
    return null != e && n && n.normalizeQuery && (e = n.normalizeQuery(e)),
    e
  }
  function ce(t, e, n, i, r, a) {
    var o = t._$handlers;
    if ("function" == typeof n && (r = i, i = n, n = null), !i || !e) return t;
    n = he(t, n),
    o[e] || (o[e] = []);
    for (var s = 0; s < o[e].length; s++) if (o[e][s].h === i) return t;
    var l = {
      h: i,
      one: a,
      query: n,
      ctx: r || t,
      callAtLast: i.zrEventfulCallAtLast
    },
    u = o[e].length - 1,
    h = o[e][u];
    return h && h.callAtLast ? o[e].splice(u, 0, l) : o[e].push(l),
    t
  }
  function fe(t, e, n, i, r, a) {
    var o = i + "-" + r,
    s = t.length;
    if (a.hasOwnProperty(o)) return a[o];
    if (1 === e) {
      var l = Math.round(Math.log((1 << s) - 1 & ~r) / Sf);
      return t[n][l]
    }
    for (var u = i | 1 << n,
    h = n + 1; i & 1 << h;) h++;
    for (var c = 0,
    f = 0,
    d = 0; s > f; f++) {
      var p = 1 << f;
      p & r || (c += (d % 2 ? -1 : 1) * t[n][f] * fe(t, e - 1, h, u, r | p, a), d++)
    }
    return a[o] = c,
    c
  }
  function de(t, e) {
    var n = [[t[0], t[1], 1, 0, 0, 0, -e[0] * t[0], -e[0] * t[1]], [0, 0, 0, t[0], t[1], 1, -e[1] * t[0], -e[1] * t[1]], [t[2], t[3], 1, 0, 0, 0, -e[2] * t[2], -e[2] * t[3]], [0, 0, 0, t[2], t[3], 1, -e[3] * t[2], -e[3] * t[3]], [t[4], t[5], 1, 0, 0, 0, -e[4] * t[4], -e[4] * t[5]], [0, 0, 0, t[4], t[5], 1, -e[5] * t[4], -e[5] * t[5]], [t[6], t[7], 1, 0, 0, 0, -e[6] * t[6], -e[6] * t[7]], [0, 0, 0, t[6], t[7], 1, -e[7] * t[6], -e[7] * t[7]]],
    i = {},
    r = fe(n, 8, 0, 0, 0, i);
    if (0 !== r) {
      for (var a = [], o = 0; 8 > o; o++) for (var s = 0; 8 > s; s++) null == a[s] && (a[s] = 0),
      a[s] += ((o + s) % 2 ? -1 : 1) * fe(n, 7, 0 === o ? 1 : 0, 1 << o, 1 << s, i) / r * e[o];
      return function(t, e, n) {
        var i = e * a[6] + n * a[7] + 1;
        t[0] = (e * a[0] + n * a[1] + a[2]) / i,
        t[1] = (e * a[3] + n * a[4] + a[5]) / i
      }
    }
  }
  function pe(t, e, n, i, r) {
    if (e.getBoundingClientRect && tf.domSupported && !me(e)) {
      var a = e[Tf] || (e[Tf] = {}),
      o = ge(e, a),
      s = ve(o, a, r);
      if (s) return s(t, n, i),
      !0
    }
    return ! 1
  }
  function ge(t, e) {
    var n = e.markers;
    if (n) return n;
    n = e.markers = [];
    for (var i = ["left", "right"], r = ["top", "bottom"], a = 0; 4 > a; a++) {
      var o = document.createElement("div"),
      s = o.style,
      l = a % 2,
      u = (a >> 1) % 2;
      s.cssText = ["position: absolute", "visibility: hidden", "padding: 0", "margin: 0", "border-width: 0", "user-select: none", "width:0", "height:0", i[l] + ":0", r[u] + ":0", i[1 - l] + ":auto", r[1 - u] + ":auto", ""].join("!important;"),
      t.appendChild(o),
      n.push(o)
    }
    return n
  }
  function ve(t, e, n) {
    for (var i = n ? "invTrans": "trans", r = e[i], a = e.srcCoords, o = !0, s = [], l = [], u = 0; 4 > u; u++) {
      var h = t[u].getBoundingClientRect(),
      c = 2 * u,
      f = h.left,
      d = h.top;
      s.push(f, d),
      o = o && a && f === a[c] && d === a[c + 1],
      l.push(t[u].offsetLeft, t[u].offsetTop)
    }
    return o && r ? r: (e.srcCoords = s, e[i] = n ? de(l, s) : de(s, l))
  }
  function me(t) {
    return "CANVAS" === t.nodeName.toUpperCase()
  }
  function ye(t, e, n, i) {
    return n = n || {},
    i || !tf.canvasSupported ? _e(t, e, n) : tf.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ? (n.zrX = e.layerX, n.zrY = e.layerY) : null != e.offsetX ? (n.zrX = e.offsetX, n.zrY = e.offsetY) : _e(t, e, n),
    n
  }
  function _e(t, e, n) {
    if (tf.domSupported && t.getBoundingClientRect) {
      var i = e.clientX,
      r = e.clientY;
      if (me(t)) {
        var a = t.getBoundingClientRect();
        return n.zrX = i - a.left,
        void(n.zrY = r - a.top)
      }
      if (pe(If, t, i, r)) return n.zrX = If[0],
      void(n.zrY = If[1])
    }
    n.zrX = n.zrY = 0
  }
  function xe(t) {
    return t || window.event
  }
  function we(t, e, n) {
    if (e = xe(e), null != e.zrX) return e;
    var i = e.type,
    r = i && i.indexOf("touch") >= 0;
    if (r) {
      var a = "touchend" !== i ? e.targetTouches[0] : e.changedTouches[0];
      a && ye(t, a, e, n)
    } else ye(t, e, e, n),
    e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
    var o = e.button;
    return null == e.which && void 0 !== o && kf.test(e.type) && (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0),
    e
  }
  function be(t, e, n, i) {
    Cf ? t.addEventListener(e, n, i) : t.attachEvent("on" + e, n)
  }
  function Me(t, e, n, i) {
    Cf ? t.removeEventListener(e, n, i) : t.detachEvent("on" + e, n)
  }
  function Se(t) {
    var e = t[1][0] - t[0][0],
    n = t[1][1] - t[0][1];
    return Math.sqrt(e * e + n * n)
  }
  function Te(t) {
    return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2]
  }
  function Ce(t, e, n) {
    return {
      type: t,
      event: n,
      target: e.target,
      topTarget: e.topTarget,
      cancelBubble: !1,
      offsetX: n.zrX,
      offsetY: n.zrY,
      gestureEvent: n.gestureEvent,
      pinchX: n.pinchX,
      pinchY: n.pinchY,
      pinchScale: n.pinchScale,
      wheelDelta: n.zrDelta,
      zrByTouch: n.zrByTouch,
      which: n.which,
      stop: ke
    }
  }
  function ke() {
    Df(this.event)
  }
  function Ie() {}
  function De(t, e, n) {
    if (t[t.rectHover ? "rectContain": "contain"](e, n)) {
      for (var i, r = t; r;) {
        if (r.clipPath && !r.clipPath.contain(e, n)) return ! 1;
        r.silent && (i = !0),
        r = r.parent
      }
      return i ? Pf: !0
    }
    return ! 1
  }
  function Ae(t, e, n) {
    var i = t.painter;
    return 0 > e || e > i.getWidth() || 0 > n || n > i.getHeight()
  }
  function Le() {
    var t = new Bf(6);
    return Pe(t),
    t
  }
  function Pe(t) {
    return t[0] = 1,
    t[1] = 0,
    t[2] = 0,
    t[3] = 1,
    t[4] = 0,
    t[5] = 0,
    t
  }
  function Oe(t, e) {
    return t[0] = e[0],
    t[1] = e[1],
    t[2] = e[2],
    t[3] = e[3],
    t[4] = e[4],
    t[5] = e[5],
    t
  }
  function Ee(t, e, n) {
    var i = e[0] * n[0] + e[2] * n[1],
    r = e[1] * n[0] + e[3] * n[1],
    a = e[0] * n[2] + e[2] * n[3],
    o = e[1] * n[2] + e[3] * n[3],
    s = e[0] * n[4] + e[2] * n[5] + e[4],
    l = e[1] * n[4] + e[3] * n[5] + e[5];
    return t[0] = i,
    t[1] = r,
    t[2] = a,
    t[3] = o,
    t[4] = s,
    t[5] = l,
    t
  }
  function Be(t, e, n) {
    return t[0] = e[0],
    t[1] = e[1],
    t[2] = e[2],
    t[3] = e[3],
    t[4] = e[4] + n[0],
    t[5] = e[5] + n[1],
    t
  }
  function Re(t, e, n) {
    var i = e[0],
    r = e[2],
    a = e[4],
    o = e[1],
    s = e[3],
    l = e[5],
    u = Math.sin(n),
    h = Math.cos(n);
    return t[0] = i * h + o * u,
    t[1] = -i * u + o * h,
    t[2] = r * h + s * u,
    t[3] = -r * u + h * s,
    t[4] = h * a + u * l,
    t[5] = h * l - u * a,
    t
  }
  function ze(t, e, n) {
    var i = n[0],
    r = n[1];
    return t[0] = e[0] * i,
    t[1] = e[1] * r,
    t[2] = e[2] * i,
    t[3] = e[3] * r,
    t[4] = e[4] * i,
    t[5] = e[5] * r,
    t
  }
  function Fe(t, e) {
    var n = e[0],
    i = e[2],
    r = e[4],
    a = e[1],
    o = e[3],
    s = e[5],
    l = n * o - a * i;
    return l ? (l = 1 / l, t[0] = o * l, t[1] = -a * l, t[2] = -i * l, t[3] = n * l, t[4] = (i * s - o * r) * l, t[5] = (a * r - n * s) * l, t) : null
  }
  function Ne(t) {
    var e = Le();
    return Oe(e, t),
    e
  }
  function He(t) {
    return t > Ff || -Ff > t
  }
  function Ve(t) {
    this._target = t.target,
    this._life = t.life || 1e3,
    this._delay = t.delay || 0,
    this._initialized = !1,
    this.loop = null == t.loop ? !1 : t.loop,
    this.gap = t.gap || 0,
    this.easing = t.easing || "Linear",
    this.onframe = t.onframe,
    this.ondestroy = t.ondestroy,
    this.onrestart = t.onrestart,
    this._pausedTime = 0,
    this._paused = !1
  }
  function We(t) {
    return t = Math.round(t),
    0 > t ? 0 : t > 255 ? 255 : t
  }
  function Ge(t) {
    return t = Math.round(t),
    0 > t ? 0 : t > 360 ? 360 : t
  }
  function Xe(t) {
    return 0 > t ? 0 : t > 1 ? 1 : t
  }
  function qe(t) {
    return We(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 * 255 : parseInt(t, 10))
  }
  function Ue(t) {
    return Xe(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 : parseFloat(t))
  }
  function Ye(t, e, n) {
    return 0 > n ? n += 1 : n > 1 && (n -= 1),
    1 > 6 * n ? t + (e - t) * n * 6 : 1 > 2 * n ? e: 2 > 3 * n ? t + (e - t) * (2 / 3 - n) * 6 : t
  }
  function je(t, e, n) {
    return t + (e - t) * n
  }
  function Ze(t, e, n, i, r) {
    return t[0] = e,
    t[1] = n,
    t[2] = i,
    t[3] = r,
    t
  }
  function $e(t, e) {
    return t[0] = e[0],
    t[1] = e[1],
    t[2] = e[2],
    t[3] = e[3],
    t
  }
  function Qe(t, e) {
    Kf && $e(Kf, e),
    Kf = Qf.put(t, Kf || e.slice())
  }
  function Ke(t, e) {
    if (t) {
      e = e || [];
      var n = Qf.get(t);
      if (n) return $e(e, n);
      t += "";
      var i = t.replace(/ /g, "").toLowerCase();
      if (i in $f) return $e(e, $f[i]),
      Qe(t, e),
      e;
      if ("#" !== i.charAt(0)) {
        var r = i.indexOf("("),
        a = i.indexOf(")");
        if ( - 1 !== r && a + 1 === i.length) {
          var o = i.substr(0, r),
          s = i.substr(r + 1, a - (r + 1)).split(","),
          l = 1;
          switch (o) {
          case "rgba":
            if (4 !== s.length) return void Ze(e, 0, 0, 0, 1);
            l = Ue(s.pop());
          case "rgb":
            return 3 !== s.length ? void Ze(e, 0, 0, 0, 1) : (Ze(e, qe(s[0]), qe(s[1]), qe(s[2]), l), Qe(t, e), e);
          case "hsla":
            return 4 !== s.length ? void Ze(e, 0, 0, 0, 1) : (s[3] = Ue(s[3]), Je(s, e), Qe(t, e), e);
          case "hsl":
            return 3 !== s.length ? void Ze(e, 0, 0, 0, 1) : (Je(s, e), Qe(t, e), e);
          default:
            return
          }
        }
        Ze(e, 0, 0, 0, 1)
      } else {
        if (4 === i.length) {
          var u = parseInt(i.substr(1), 16);
          return u >= 0 && 4095 >= u ? (Ze(e, (3840 & u) >> 4 | (3840 & u) >> 8, 240 & u | (240 & u) >> 4, 15 & u | (15 & u) << 4, 1), Qe(t, e), e) : void Ze(e, 0, 0, 0, 1)
        }
        if (7 === i.length) {
          var u = parseInt(i.substr(1), 16);
          return u >= 0 && 16777215 >= u ? (Ze(e, (16711680 & u) >> 16, (65280 & u) >> 8, 255 & u, 1), Qe(t, e), e) : void Ze(e, 0, 0, 0, 1)
        }
      }
    }
  }
  function Je(t, e) {
    var n = (parseFloat(t[0]) % 360 + 360) % 360 / 360,
    i = Ue(t[1]),
    r = Ue(t[2]),
    a = .5 >= r ? r * (i + 1) : r + i - r * i,
    o = 2 * r - a;
    return e = e || [],
    Ze(e, We(255 * Ye(o, a, n + 1 / 3)), We(255 * Ye(o, a, n)), We(255 * Ye(o, a, n - 1 / 3)), 1),
    4 === t.length && (e[3] = t[3]),
    e
  }
  function tn(t) {
    if (t) {
      var e, n, i = t[0] / 255,
      r = t[1] / 255,
      a = t[2] / 255,
      o = Math.min(i, r, a),
      s = Math.max(i, r, a),
      l = s - o,
      u = (s + o) / 2;
      if (0 === l) e = 0,
      n = 0;
      else {
        n = .5 > u ? l / (s + o) : l / (2 - s - o);
        var h = ((s - i) / 6 + l / 2) / l,
        c = ((s - r) / 6 + l / 2) / l,
        f = ((s - a) / 6 + l / 2) / l;
        i === s ? e = f - c: r === s ? e = 1 / 3 + h - f: a === s && (e = 2 / 3 + c - h),
        0 > e && (e += 1),
        e > 1 && (e -= 1)
      }
      var d = [360 * e, n, u];
      return null != t[3] && d.push(t[3]),
      d
    }
  }
  function en(t, e) {
    var n = Ke(t);
    if (n) {
      for (var i = 0; 3 > i; i++) n[i] = 0 > e ? n[i] * (1 - e) | 0 : (255 - n[i]) * e + n[i] | 0,
      n[i] > 255 ? n[i] = 255 : t[i] < 0 && (n[i] = 0);
      return ln(n, 4 === n.length ? "rgba": "rgb")
    }
  }
  function nn(t) {
    var e = Ke(t);
    return e ? ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) : void 0
  }
  function rn(t, e, n) {
    if (e && e.length && t >= 0 && 1 >= t) {
      n = n || [];
      var i = t * (e.length - 1),
      r = Math.floor(i),
      a = Math.ceil(i),
      o = e[r],
      s = e[a],
      l = i - r;
      return n[0] = We(je(o[0], s[0], l)),
      n[1] = We(je(o[1], s[1], l)),
      n[2] = We(je(o[2], s[2], l)),
      n[3] = Xe(je(o[3], s[3], l)),
      n
    }
  }
  function an(t, e, n) {
    if (e && e.length && t >= 0 && 1 >= t) {
      var i = t * (e.length - 1),
      r = Math.floor(i),
      a = Math.ceil(i),
      o = Ke(e[r]),
      s = Ke(e[a]),
      l = i - r,
      u = ln([We(je(o[0], s[0], l)), We(je(o[1], s[1], l)), We(je(o[2], s[2], l)), Xe(je(o[3], s[3], l))], "rgba");
      return n ? {
        color: u,
        leftIndex: r,
        rightIndex: a,
        value: i
      }: u
    }
  }
  function on(t, e, n, i) {
    return t = Ke(t),
    t ? (t = tn(t), null != e && (t[0] = Ge(e)), null != n && (t[1] = Ue(n)), null != i && (t[2] = Ue(i)), ln(Je(t), "rgba")) : void 0
  }
  function sn(t, e) {
    return t = Ke(t),
    t && null != e ? (t[3] = Xe(e), ln(t, "rgba")) : void 0
  }
  function ln(t, e) {
    if (t && t.length) {
      var n = t[0] + "," + t[1] + "," + t[2];
      return ("rgba" === e || "hsva" === e || "hsla" === e) && (n += "," + t[3]),
      e + "(" + n + ")"
    }
  }
  function un(t, e) {
    return t[e]
  }
  function hn(t, e, n) {
    t[e] = n
  }
  function cn(t, e, n) {
    return (e - t) * n + t
  }
  function fn(t, e, n) {
    return n > .5 ? e: t
  }
  function dn(t, e, n, i, r) {
    var a = t.length;
    if (1 === r) for (var o = 0; a > o; o++) i[o] = cn(t[o], e[o], n);
    else for (var s = a && t[0].length, o = 0; a > o; o++) for (var l = 0; s > l; l++) i[o][l] = cn(t[o][l], e[o][l], n)
  }
  function pn(t, e, n) {
    var i = t.length,
    r = e.length;
    if (i !== r) {
      var a = i > r;
      if (a) t.length = r;
      else for (var o = i; r > o; o++) t.push(1 === n ? e[o] : nd.call(e[o]))
    }
    for (var s = t[0] && t[0].length, o = 0; o < t.length; o++) if (1 === n) isNaN(t[o]) && (t[o] = e[o]);
    else for (var l = 0; s > l; l++) isNaN(t[o][l]) && (t[o][l] = e[o][l])
  }
  function gn(t, e, n) {
    if (t === e) return ! 0;
    var i = t.length;
    if (i !== e.length) return ! 1;
    if (1 === n) {
      for (var r = 0; i > r; r++) if (t[r] !== e[r]) return ! 1
    } else for (var a = t[0].length, r = 0; i > r; r++) for (var o = 0; a > o; o++) if (t[r][o] !== e[r][o]) return ! 1;
    return ! 0
  }
  function vn(t, e, n, i, r, a, o, s, l) {
    var u = t.length;
    if (1 === l) for (var h = 0; u > h; h++) s[h] = mn(t[h], e[h], n[h], i[h], r, a, o);
    else for (var c = t[0].length, h = 0; u > h; h++) for (var f = 0; c > f; f++) s[h][f] = mn(t[h][f], e[h][f], n[h][f], i[h][f], r, a, o)
  }
  function mn(t, e, n, i, r, a, o) {
    var s = .5 * (n - t),
    l = .5 * (i - e);
    return (2 * (e - n) + s + l) * o + ( - 3 * (e - n) - 2 * s - l) * a + s * r + e
  }
  function yn(t) {
    if (f(t)) {
      var e = t.length;
      if (f(t[0])) {
        for (var n = [], i = 0; e > i; i++) n.push(nd.call(t[i]));
        return n
      }
      return nd.call(t)
    }
    return t
  }
  function _n(t) {
    return t[0] = Math.floor(t[0]),
    t[1] = Math.floor(t[1]),
    t[2] = Math.floor(t[2]),
    "rgba(" + t.join(",") + ")"
  }
  function xn(t) {
    var e = t[t.length - 1].value;
    return f(e && e[0]) ? 2 : 1
  }
  function wn(t, e, n, i, r, a) {
    var o = t._getter,
    s = t._setter,
    l = "spline" === e,
    u = i.length;
    if (u) {
      var h, c = i[0].value,
      d = f(c),
      p = !1,
      g = !1,
      v = d ? xn(i) : 0;
      i.sort(function(t, e) {
        return t.time - e.time
      }),
      h = i[u - 1].time;
      for (var m = [], y = [], _ = i[0].value, x = !0, w = 0; u > w; w++) {
        m.push(i[w].time / h);
        var b = i[w].value;
        if (d && gn(b, _, v) || !d && b === _ || (x = !1), _ = b, "string" == typeof b) {
          var M = Ke(b);
          M ? (b = M, p = !0) : g = !0
        }
        y.push(b)
      }
      if (a || !x) {
        for (var S = y[u - 1], w = 0; u - 1 > w; w++) d ? pn(y[w], S, v) : !isNaN(y[w]) || isNaN(S) || g || p || (y[w] = S);
        d && pn(o(t._target, r), S, v);
        var T, C, k, I, D, A, L = 0,
        P = 0;
        if (p) var O = [0, 0, 0, 0];
        var E = function(t, e) {
          var n;
          if (0 > e) n = 0;
          else if (P > e) {
            for (T = Math.min(L + 1, u - 1), n = T; n >= 0 && !(m[n] <= e); n--);
            n = Math.min(n, u - 2)
          } else {
            for (n = L; u > n && !(m[n] > e); n++);
            n = Math.min(n - 1, u - 2)
          }
          L = n,
          P = e;
          var i = m[n + 1] - m[n];
          if (0 !== i) if (C = (e - m[n]) / i, l) if (I = y[n], k = y[0 === n ? n: n - 1], D = y[n > u - 2 ? u - 1 : n + 1], A = y[n > u - 3 ? u - 1 : n + 2], d) vn(k, I, D, A, C, C * C, C * C * C, o(t, r), v);
          else {
            var a;
            if (p) a = vn(k, I, D, A, C, C * C, C * C * C, O, 1),
            a = _n(O);
            else {
              if (g) return fn(I, D, C);
              a = mn(k, I, D, A, C, C * C, C * C * C)
            }
            s(t, r, a)
          } else if (d) dn(y[n], y[n + 1], C, o(t, r), v);
          else {
            var a;
            if (p) dn(y[n], y[n + 1], C, O, 1),
            a = _n(O);
            else {
              if (g) return fn(y[n], y[n + 1], C);
              a = cn(y[n], y[n + 1], C)
            }
            s(t, r, a)
          }
        },
        B = new Ve({
          target: t._target,
          life: h,
          loop: t._loop,
          delay: t._delay,
          onframe: E,
          ondestroy: n
        });
        return e && "spline" !== e && (B.easing = e),
        B
      }
    }
  }
  function bn(t, e, n, i, r, a, o, s) {
    function l() {
      h--,
      h || a && a()
    }
    b(i) ? (a = r, r = i, i = 0) : w(r) ? (a = r, r = "linear", i = 0) : w(i) ? (a = i, i = 0) : w(n) ? (a = n, n = 500) : n || (n = 500),
    t.stopAnimation(),
    Mn(t, "", t, e, n, i, s);
    var u = t.animators.slice(),
    h = u.length;
    h || a && a();
    for (var c = 0; c < u.length; c++) u[c].done(l).start(r, o)
  }
  function Mn(t, e, n, i, r, a, o) {
    var s = {},
    l = 0;
    for (var u in i) i.hasOwnProperty(u) && (null != n[u] ? M(i[u]) && !f(i[u]) ? Mn(t, e ? e + "." + u: u, n[u], i[u], r, a, o) : (o ? (s[u] = n[u], Sn(t, e, u, i[u])) : s[u] = i[u], l++) : null == i[u] || o || Sn(t, e, u, i[u]));
    l > 0 && t.animate(e, !1).when(null == r ? 500 : r, s).delay(a || 0)
  }
  function Sn(t, e, n, i) {
    if (e) {
      var r = {};
      r[e] = {},
      r[e][n] = i,
      t.attr(r)
    } else t.attr(n, i)
  }
  function Tn(t, e, n, i) {
    0 > n && (t += n, n = -n),
    0 > i && (e += i, i = -i),
    this.x = t,
    this.y = e,
    this.width = n,
    this.height = i
  }
  function Cn(t) {
    for (var e = 0; t >= gd;) e |= 1 & t,
    t >>= 1;
    return t + e
  }
  function kn(t, e, n, i) {
    var r = e + 1;
    if (r === n) return 1;
    if (i(t[r++], t[e]) < 0) {
      for (; n > r && i(t[r], t[r - 1]) < 0;) r++;
      In(t, e, r)
    } else for (; n > r && i(t[r], t[r - 1]) >= 0;) r++;
    return r - e
  }
  function In(t, e, n) {
    for (n--; n > e;) {
      var i = t[e];
      t[e++] = t[n],
      t[n--] = i
    }
  }
  function Dn(t, e, n, i, r) {
    for (i === e && i++; n > i; i++) {
      for (var a, o = t[i], s = e, l = i; l > s;) a = s + l >>> 1,
      r(o, t[a]) < 0 ? l = a: s = a + 1;
      var u = i - s;
      switch (u) {
      case 3:
        t[s + 3] = t[s + 2];
      case 2:
        t[s + 2] = t[s + 1];
      case 1:
        t[s + 1] = t[s];
        break;
      default:
        for (; u > 0;) t[s + u] = t[s + u - 1],
        u--
      }
      t[s] = o
    }
  }
  function An(t, e, n, i, r, a) {
    var o = 0,
    s = 0,
    l = 1;
    if (a(t, e[n + r]) > 0) {
      for (s = i - r; s > l && a(t, e[n + r + l]) > 0;) o = l,
      l = (l << 1) + 1,
      0 >= l && (l = s);
      l > s && (l = s),
      o += r,
      l += r
    } else {
      for (s = r + 1; s > l && a(t, e[n + r - l]) <= 0;) o = l,
      l = (l << 1) + 1,
      0 >= l && (l = s);
      l > s && (l = s);
      var u = o;
      o = r - l,
      l = r - u
    }
    for (o++; l > o;) {
      var h = o + (l - o >>> 1);
      a(t, e[n + h]) > 0 ? o = h + 1 : l = h
    }
    return l
  }
  function Ln(t, e, n, i, r, a) {
    var o = 0,
    s = 0,
    l = 1;
    if (a(t, e[n + r]) < 0) {
      for (s = r + 1; s > l && a(t, e[n + r - l]) < 0;) o = l,
      l = (l << 1) + 1,
      0 >= l && (l = s);
      l > s && (l = s);
      var u = o;
      o = r - l,
      l = r - u
    } else {
      for (s = i - r; s > l && a(t, e[n + r + l]) >= 0;) o = l,
      l = (l << 1) + 1,
      0 >= l && (l = s);
      l > s && (l = s),
      o += r,
      l += r
    }
    for (o++; l > o;) {
      var h = o + (l - o >>> 1);
      a(t, e[n + h]) < 0 ? l = h: o = h + 1
    }
    return l
  }
  function Pn(t, e) {
    function n(t, e) {
      l[c] = t,
      u[c] = e,
      c += 1
    }
    function i() {
      for (; c > 1;) {
        var t = c - 2;
        if (t >= 1 && u[t - 1] <= u[t] + u[t + 1] || t >= 2 && u[t - 2] <= u[t] + u[t - 1]) u[t - 1] < u[t + 1] && t--;
        else if (u[t] > u[t + 1]) break;
        a(t)
      }
    }
    function r() {
      for (; c > 1;) {
        var t = c - 2;
        t > 0 && u[t - 1] < u[t + 1] && t--,
        a(t)
      }
    }
    function a(n) {
      var i = l[n],
      r = u[n],
      a = l[n + 1],
      h = u[n + 1];
      u[n] = r + h,
      n === c - 3 && (l[n + 1] = l[n + 2], u[n + 1] = u[n + 2]),
      c--;
      var f = Ln(t[a], t, i, r, 0, e);
      i += f,
      r -= f,
      0 !== r && (h = An(t[i + r - 1], t, a, h, h - 1, e), 0 !== h && (h >= r ? o(i, r, a, h) : s(i, r, a, h)))
    }
    function o(n, i, r, a) {
      var o = 0;
      for (o = 0; i > o; o++) f[o] = t[n + o];
      var s = 0,
      l = r,
      u = n;
      if (t[u++] = t[l++], 0 !== --a) {
        if (1 === i) {
          for (o = 0; a > o; o++) t[u + o] = t[l + o];
          return void(t[u + a] = f[s])
        }
        for (var c, d, p, g = h;;) {
          c = 0,
          d = 0,
          p = !1;
          do
          if (e(t[l], f[s]) < 0) {
            if (t[u++] = t[l++], d++, c = 0, 0 === --a) {
              p = !0;
              break
            }
          } else if (t[u++] = f[s++], c++, d = 0, 1 === --i) {
            p = !0;
            break
          }
          while (g > (c | d));
          if (p) break;
          do {
            if (c = Ln(t[l], f, s, i, 0, e), 0 !== c) {
              for (o = 0; c > o; o++) t[u + o] = f[s + o];
              if (u += c, s += c, i -= c, 1 >= i) {
                p = !0;
                break
              }
            }
            if (t[u++] = t[l++], 0 === --a) {
              p = !0;
              break
            }
            if (d = An(f[s], t, l, a, 0, e), 0 !== d) {
              for (o = 0; d > o; o++) t[u + o] = t[l + o];
              if (u += d, l += d, a -= d, 0 === a) {
                p = !0;
                break
              }
            }
            if (t[u++] = f[s++], 1 === --i) {
              p = !0;
              break
            }
            g--
          } while ( c >= vd || d >= vd );
          if (p) break;
          0 > g && (g = 0),
          g += 2
        }
        if (h = g, 1 > h && (h = 1), 1 === i) {
          for (o = 0; a > o; o++) t[u + o] = t[l + o];
          t[u + a] = f[s]
        } else {
          if (0 === i) throw new Error;
          for (o = 0; i > o; o++) t[u + o] = f[s + o]
        }
      } else for (o = 0; i > o; o++) t[u + o] = f[s + o]
    }
    function s(n, i, r, a) {
      var o = 0;
      for (o = 0; a > o; o++) f[o] = t[r + o];
      var s = n + i - 1,
      l = a - 1,
      u = r + a - 1,
      c = 0,
      d = 0;
      if (t[u--] = t[s--], 0 !== --i) {
        if (1 === a) {
          for (u -= i, s -= i, d = u + 1, c = s + 1, o = i - 1; o >= 0; o--) t[d + o] = t[c + o];
          return void(t[u] = f[l])
        }
        for (var p = h;;) {
          var g = 0,
          v = 0,
          m = !1;
          do
          if (e(f[l], t[s]) < 0) {
            if (t[u--] = t[s--], g++, v = 0, 0 === --i) {
              m = !0;
              break
            }
          } else if (t[u--] = f[l--], v++, g = 0, 1 === --a) {
            m = !0;
            break
          }
          while (p > (g | v));
          if (m) break;
          do {
            if (g = i - Ln(f[l], t, n, i, i - 1, e), 0 !== g) {
              for (u -= g, s -= g, i -= g, d = u + 1, c = s + 1, o = g - 1; o >= 0; o--) t[d + o] = t[c + o];
              if (0 === i) {
                m = !0;
                break
              }
            }
            if (t[u--] = f[l--], 1 === --a) {
              m = !0;
              break
            }
            if (v = a - An(t[s], f, 0, a, a - 1, e), 0 !== v) {
              for (u -= v, l -= v, a -= v, d = u + 1, c = l + 1, o = 0; v > o; o++) t[d + o] = f[c + o];
              if (1 >= a) {
                m = !0;
                break
              }
            }
            if (t[u--] = t[s--], 0 === --i) {
              m = !0;
              break
            }
            p--
          } while ( g >= vd || v >= vd );
          if (m) break;
          0 > p && (p = 0),
          p += 2
        }
        if (h = p, 1 > h && (h = 1), 1 === a) {
          for (u -= i, s -= i, d = u + 1, c = s + 1, o = i - 1; o >= 0; o--) t[d + o] = t[c + o];
          t[u] = f[l]
        } else {
          if (0 === a) throw new Error;
          for (c = u - (a - 1), o = 0; a > o; o++) t[c + o] = f[o]
        }
      } else for (c = u - (a - 1), o = 0; a > o; o++) t[c + o] = f[o]
    }
    var l, u, h = vd,
    c = 0,
    f = [];
    l = [],
    u = [],
    this.mergeRuns = i,
    this.forceMergeRuns = r,
    this.pushRun = n
  }
  function On(t, e, n, i) {
    n || (n = 0),
    i || (i = t.length);
    var r = i - n;
    if (! (2 > r)) {
      var a = 0;
      if (gd > r) return a = kn(t, n, i, e),
      void Dn(t, n, i, n + a, e);
      var o = new Pn(t, e),
      s = Cn(r);
      do {
        if (a = kn(t, n, i, e), s > a) {
          var l = r;
          l > s && (l = s),
          Dn(t, n, n + l, n + a, e),
          a = l
        }
        o.pushRun(n, a), o.mergeRuns(), r -= a, n += a
      } while ( 0 !== r );
      o.forceMergeRuns()
    }
  }
  function En(t, e) {
    return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2: t.z - e.z: t.zlevel - e.zlevel
  }
  function Bn(t, e, n) {
    var i = null == e.x ? 0 : e.x,
    r = null == e.x2 ? 1 : e.x2,
    a = null == e.y ? 0 : e.y,
    o = null == e.y2 ? 0 : e.y2;
    e.global || (i = i * n.width + n.x, r = r * n.width + n.x, a = a * n.height + n.y, o = o * n.height + n.y),
    i = isNaN(i) ? 0 : i,
    r = isNaN(r) ? 1 : r,
    a = isNaN(a) ? 0 : a,
    o = isNaN(o) ? 0 : o;
    var s = t.createLinearGradient(i, a, r, o);
    return s
  }
  function Rn(t, e, n) {
    var i = n.width,
    r = n.height,
    a = Math.min(i, r),
    o = null == e.x ? .5 : e.x,
    s = null == e.y ? .5 : e.y,
    l = null == e.r ? .5 : e.r;
    e.global || (o = o * i + n.x, s = s * r + n.y, l *= a);
    var u = t.createRadialGradient(o, s, 0, o, s, l);
    return u
  }
  function zn() {
    return ! 1
  }
  function Fn(t, e, n) {
    var i = ff(),
    r = e.getWidth(),
    a = e.getHeight(),
    o = i.style;
    return o && (o.position = "absolute", o.left = 0, o.top = 0, o.width = r + "px", o.height = a + "px", i.setAttribute("data-zr-dom-id", t)),
    i.width = r * n,
    i.height = a * n,
    i
  }
  function Nn(t) {
    if ("string" == typeof t) {
      var e = Ad.get(t);
      return e && e.image
    }
    return t
  }
  function Hn(t, e, n, i, r) {
    if (t) {
      if ("string" == typeof t) {
        if (e && e.__zrImageSrc === t || !n) return e;
        var a = Ad.get(t),
        o = {
          hostEl: n,
          cb: i,
          cbPayload: r
        };
        return a ? (e = a.image, !Wn(e) && a.pending.push(o)) : (e = new Image, e.onload = e.onerror = Vn, Ad.put(t, e.__cachedImgObj = {
          image: e,
          pending: [o]
        }), e.src = e.__zrImageSrc = t),
        e
      }
      return t
    }
    return e
  }
  function Vn() {
    var t = this.__cachedImgObj;
    this.onload = this.onerror = this.__cachedImgObj = null;
    for (var e = 0; e < t.pending.length; e++) {
      var n = t.pending[e],
      i = n.cb;
      i && i(this, n.cbPayload),
      n.hostEl.dirty()
    }
    t.pending.length = 0
  }
  function Wn(t) {
    return t && t.width && t.height
  }
  function Gn(t, e) {
    e = e || Bd;
    var n = t + ":" + e;
    if (Ld[n]) return Ld[n];
    for (var i = (t + "").split("\n"), r = 0, a = 0, o = i.length; o > a; a++) r = Math.max(ei(i[a], e).width, r);
    return Pd > Od && (Pd = 0, Ld = {}),
    Pd++,
    Ld[n] = r,
    r
  }
  function Xn(t, e, n, i, r, a, o, s) {
    return o ? Un(t, e, n, i, r, a, o, s) : qn(t, e, n, i, r, a, s)
  }
  function qn(t, e, n, i, r, a, o) {
    var s = ni(t, e, r, a, o),
    l = Gn(t, e);
    r && (l += r[1] + r[3]);
    var u = s.outerHeight,
    h = Yn(0, l, n),
    c = jn(0, u, i),
    f = new Tn(h, c, l, u);
    return f.lineHeight = s.lineHeight,
    f
  }
  function Un(t, e, n, i, r, a, o, s) {
    var l = ii(t, {
      rich: o,
      truncate: s,
      font: e,
      textAlign: n,
      textPadding: r,
      textLineHeight: a
    }),
    u = l.outerWidth,
    h = l.outerHeight,
    c = Yn(0, u, n),
    f = jn(0, h, i);
    return new Tn(c, f, u, h)
  }
  function Yn(t, e, n) {
    return "right" === n ? t -= e: "center" === n && (t -= e / 2),
    t
  }
  function jn(t, e, n) {
    return "middle" === n ? t -= e / 2 : "bottom" === n && (t -= e),
    t
  }
  function Zn(t, e, n) {
    var i = e.textPosition,
    r = e.textDistance,
    a = n.x,
    o = n.y;
    r = r || 0;
    var s = n.height,
    l = n.width,
    u = s / 2,
    h = "left",
    c = "top";
    switch (i) {
    case "left":
      a -= r,
      o += u,
      h = "right",
      c = "middle";
      break;
    case "right":
      a += r + l,
      o += u,
      c = "middle";
      break;
    case "top":
      a += l / 2,
      o -= r,
      h = "center",
      c = "bottom";
      break;
    case "bottom":
      a += l / 2,
      o += s + r,
      h = "center";
      break;
    case "inside":
      a += l / 2,
      o += u,
      h = "center",
      c = "middle";
      break;
    case "insideLeft":
      a += r,
      o += u,
      c = "middle";
      break;
    case "insideRight":
      a += l - r,
      o += u,
      h = "right",
      c = "middle";
      break;
    case "insideTop":
      a += l / 2,
      o += r,
      h = "center";
      break;
    case "insideBottom":
      a += l / 2,
      o += s - r,
      h = "center",
      c = "bottom";
      break;
    case "insideTopLeft":
      a += r,
      o += r;
      break;
    case "insideTopRight":
      a += l - r,
      o += r,
      h = "right";
      break;
    case "insideBottomLeft":
      a += r,
      o += s - r,
      c = "bottom";
      break;
    case "insideBottomRight":
      a += l - r,
      o += s - r,
      h = "right",
      c = "bottom"
    }
    return t = t || {},
    t.x = a,
    t.y = o,
    t.textAlign = h,
    t.textVerticalAlign = c,
    t
  }
  function $n(t, e, n, i, r) {
    if (!e) return "";
    var a = (t + "").split("\n");
    r = Qn(e, n, i, r);
    for (var o = 0,
    s = a.length; s > o; o++) a[o] = Kn(a[o], r);
    return a.join("\n")
  }
  function Qn(t, e, n, i) {
    i = o({},
    i),
    i.font = e;
    var n = D(n, "...");
    i.maxIterations = D(i.maxIterations, 2);
    var r = i.minChar = D(i.minChar, 0);
    i.cnCharWidth = Gn("国", e);
    var a = i.ascCharWidth = Gn("a", e);
    i.placeholder = D(i.placeholder, "");
    for (var s = t = Math.max(0, t - 1), l = 0; r > l && s >= a; l++) s -= a;
    var u = Gn(n, e);
    return u > s && (n = "", u = 0),
    s = t - u,
    i.ellipsis = n,
    i.ellipsisWidth = u,
    i.contentWidth = s,
    i.containerWidth = t,
    i
  }
  function Kn(t, e) {
    var n = e.containerWidth,
    i = e.font,
    r = e.contentWidth;
    if (!n) return "";
    var a = Gn(t, i);
    if (n >= a) return t;
    for (var o = 0;; o++) {
      if (r >= a || o >= e.maxIterations) {
        t += e.ellipsis;
        break
      }
      var s = 0 === o ? Jn(t, r, e.ascCharWidth, e.cnCharWidth) : a > 0 ? Math.floor(t.length * r / a) : 0;
      t = t.substr(0, s),
      a = Gn(t, i)
    }
    return "" === t && (t = e.placeholder),
    t
  }
  function Jn(t, e, n, i) {
    for (var r = 0,
    a = 0,
    o = t.length; o > a && e > r; a++) {
      var s = t.charCodeAt(a);
      r += s >= 0 && 127 >= s ? n: i
    }
    return a
  }
  function ti(t) {
    return Gn("国", t)
  }
  function ei(t, e) {
    return Rd.measureText(t, e)
  }
  function ni(t, e, n, i, r) {
    null != t && (t += "");
    var a = D(i, ti(e)),
    o = t ? t.split("\n") : [],
    s = o.length * a,
    l = s,
    u = !0;
    if (n && (l += n[0] + n[2]), t && r) {
      u = !1;
      var h = r.outerHeight,
      c = r.outerWidth;
      if (null != h && l > h) t = "",
      o = [];
      else if (null != c) for (var f = Qn(c - (n ? n[1] + n[3] : 0), e, r.ellipsis, {
        minChar: r.minChar,
        placeholder: r.placeholder
      }), d = 0, p = o.length; p > d; d++) o[d] = Kn(o[d], f)
    }
    return {
      lines: o,
      height: s,
      outerHeight: l,
      lineHeight: a,
      canCacheByTextString: u
    }
  }
  function ii(t, e) {
    var n = {
      lines: [],
      width: 0,
      height: 0
    };
    if (null != t && (t += ""), !t) return n;
    for (var i, r = Ed.lastIndex = 0; null != (i = Ed.exec(t));) {
      var a = i.index;
      a > r && ri(n, t.substring(r, a)),
      ri(n, i[2], i[1]),
      r = Ed.lastIndex
    }
    r < t.length && ri(n, t.substring(r, t.length));
    var o = n.lines,
    s = 0,
    l = 0,
    u = [],
    h = e.textPadding,
    c = e.truncate,
    f = c && c.outerWidth,
    d = c && c.outerHeight;
    h && (null != f && (f -= h[1] + h[3]), null != d && (d -= h[0] + h[2]));
    for (var p = 0; p < o.length; p++) {
      for (var g = o[p], v = 0, m = 0, y = 0; y < g.tokens.length; y++) {
        var _ = g.tokens[y],
        x = _.styleName && e.rich[_.styleName] || {},
        w = _.textPadding = x.textPadding,
        b = _.font = x.font || e.font,
        M = _.textHeight = D(x.textHeight, ti(b));
        if (w && (M += w[0] + w[2]), _.height = M, _.lineHeight = A(x.textLineHeight, e.textLineHeight, M), _.textAlign = x && x.textAlign || e.textAlign, _.textVerticalAlign = x && x.textVerticalAlign || "middle", null != d && s + _.lineHeight > d) return {
          lines: [],
          width: 0,
          height: 0
        };
        _.textWidth = Gn(_.text, b);
        var S = x.textWidth,
        T = null == S || "auto" === S;
        if ("string" == typeof S && "%" === S.charAt(S.length - 1)) _.percentWidth = S,
        u.push(_),
        S = 0;
        else {
          if (T) {
            S = _.textWidth;
            var C = x.textBackgroundColor,
            k = C && C.image;
            k && (k = Nn(k), Wn(k) && (S = Math.max(S, k.width * M / k.height)))
          }
          var I = w ? w[1] + w[3] : 0;
          S += I;
          var L = null != f ? f - m: null;
          null != L && S > L && (!T || I > L ? (_.text = "", _.textWidth = S = 0) : (_.text = $n(_.text, L - I, b, c.ellipsis, {
            minChar: c.minChar
          }), _.textWidth = Gn(_.text, b), S = _.textWidth + I))
        }
        m += _.width = S,
        x && (v = Math.max(v, _.lineHeight))
      }
      g.width = m,
      g.lineHeight = v,
      s += v,
      l = Math.max(l, m)
    }
    n.outerWidth = n.width = D(e.textWidth, l),
    n.outerHeight = n.height = D(e.textHeight, s),
    h && (n.outerWidth += h[1] + h[3], n.outerHeight += h[0] + h[2]);
    for (var p = 0; p < u.length; p++) {
      var _ = u[p],
      P = _.percentWidth;
      _.width = parseInt(P, 10) / 100 * l
    }
    return n
  }
  function ri(t, e, n) {
    for (var i = "" === e,
    r = e.split("\n"), a = t.lines, o = 0; o < r.length; o++) {
      var s = r[o],
      l = {
        styleName: n,
        text: s,
        isLineHolder: !s && !i
      };
      if (o) a.push({
        tokens: [l]
      });
      else {
        var u = (a[a.length - 1] || (a[0] = {
          tokens: []
        })).tokens,
        h = u.length;
        1 === h && u[0].isLineHolder ? u[0] = l: (s || !h || i) && u.push(l)
      }
    }
  }
  function ai(t) {
    var e = (t.fontSize || t.fontFamily) && [t.fontStyle, t.fontWeight, (t.fontSize || 12) + "px", t.fontFamily || "sans-serif"].join(" ");
    return e && E(e) || t.textFont || t.font
  }
  function oi(t, e) {
    var n, i, r, a, o = e.x,
    s = e.y,
    l = e.width,
    u = e.height,
    h = e.r;
    0 > l && (o += l, l = -l),
    0 > u && (s += u, u = -u),
    "number" == typeof h ? n = i = r = a = h: h instanceof Array ? 1 === h.length ? n = i = r = a = h[0] : 2 === h.length ? (n = r = h[0], i = a = h[1]) : 3 === h.length ? (n = h[0], i = a = h[1], r = h[2]) : (n = h[0], i = h[1], r = h[2], a = h[3]) : n = i = r = a = 0;
    var c;
    n + i > l && (c = n + i, n *= l / c, i *= l / c),
    r + a > l && (c = r + a, r *= l / c, a *= l / c),
    i + r > u && (c = i + r, i *= u / c, r *= u / c),
    n + a > u && (c = n + a, n *= u / c, a *= u / c),
    t.moveTo(o + n, s),
    t.lineTo(o + l - i, s),
    0 !== i && t.arc(o + l - i, s + i, i, -Math.PI / 2, 0),
    t.lineTo(o + l, s + u - r),
    0 !== r && t.arc(o + l - r, s + u - r, r, 0, Math.PI / 2),
    t.lineTo(o + a, s + u),
    0 !== a && t.arc(o + a, s + u - a, a, Math.PI / 2, Math.PI),
    t.lineTo(o, s + n),
    0 !== n && t.arc(o + n, s + n, n, Math.PI, 1.5 * Math.PI)
  }
  function si(t) {
    return li(t),
    d(t.rich, li),
    t
  }
  function li(t) {
    if (t) {
      t.font = ai(t);
      var e = t.textAlign;
      "middle" === e && (e = "center"),
      t.textAlign = null == e || Fd[e] ? e: "left";
      var n = t.textVerticalAlign || t.textBaseline;
      "center" === n && (n = "middle"),
      t.textVerticalAlign = null == n || Nd[n] ? n: "top";
      var i = t.textPadding;
      i && (t.textPadding = P(t.textPadding))
    }
  }
  function ui(t, e, n, i, r, a) {
    i.rich ? ci(t, e, n, i, r, a) : hi(t, e, n, i, r, a)
  }
  function hi(t, e, n, i, r, a) {
    var o, s = gi(i),
    l = !1,
    u = e.__attrCachedBy === xd.PLAIN_TEXT;
    a !== wd ? (a && (o = a.style, l = !s && u && o), e.__attrCachedBy = s ? xd.NONE: xd.PLAIN_TEXT) : u && (e.__attrCachedBy = xd.NONE);
    var h = i.font || zd;
    l && h === (o.font || zd) || (e.font = h);
    var c = t.__computedFont;
    t.__styleFont !== h && (t.__styleFont = h, c = t.__computedFont = e.font);
    var f = i.textPadding,
    d = i.textLineHeight,
    p = t.__textCotentBlock; (!p || t.__dirtyText) && (p = t.__textCotentBlock = ni(n, c, f, d, i.truncate));
    var g = p.outerHeight,
    v = p.lines,
    m = p.lineHeight,
    y = yi(Wd, t, i, r),
    _ = y.baseX,
    x = y.baseY,
    w = y.textAlign || "left",
    b = y.textVerticalAlign;
    di(e, i, r, _, x);
    var M = jn(x, g, b),
    S = _,
    T = M;
    if (s || f) {
      var C = Gn(n, c),
      k = C;
      f && (k += f[1] + f[3]);
      var I = Yn(_, k, w);
      s && vi(t, e, i, I, M, k, g),
      f && (S = Mi(_, w, f), T += f[0])
    }
    e.textAlign = w,
    e.textBaseline = "middle",
    e.globalAlpha = i.opacity || 1;
    for (var D = 0; D < Hd.length; D++) {
      var A = Hd[D],
      L = A[0],
      P = A[1],
      O = i[L];
      l && O === o[L] || (e[P] = _d(e, P, O || A[2]))
    }
    T += m / 2;
    var E = i.textStrokeWidth,
    B = l ? o.textStrokeWidth: null,
    R = !l || E !== B,
    z = !l || R || i.textStroke !== o.textStroke,
    F = xi(i.textStroke, E),
    N = wi(i.textFill);
    if (F && (R && (e.lineWidth = E), z && (e.strokeStyle = F)), N && (l && i.textFill === o.textFill || (e.fillStyle = N)), 1 === v.length) F && e.strokeText(v[0], S, T),
    N && e.fillText(v[0], S, T);
    else for (var D = 0; D < v.length; D++) F && e.strokeText(v[D], S, T),
    N && e.fillText(v[D], S, T),
    T += m
  }
  function ci(t, e, n, i, r, a) {
    a !== wd && (e.__attrCachedBy = xd.NONE);
    var o = t.__textCotentBlock; (!o || t.__dirtyText) && (o = t.__textCotentBlock = ii(n, i)),
    fi(t, e, o, i, r)
  }
  function fi(t, e, n, i, r) {
    var a = n.width,
    o = n.outerWidth,
    s = n.outerHeight,
    l = i.textPadding,
    u = yi(Wd, t, i, r),
    h = u.baseX,
    c = u.baseY,
    f = u.textAlign,
    d = u.textVerticalAlign;
    di(e, i, r, h, c);
    var p = Yn(h, o, f),
    g = jn(c, s, d),
    v = p,
    m = g;
    l && (v += l[3], m += l[0]);
    var y = v + a;
    gi(i) && vi(t, e, i, p, g, o, s);
    for (var _ = 0; _ < n.lines.length; _++) {
      for (var x, w = n.lines[_], b = w.tokens, M = b.length, S = w.lineHeight, T = w.width, C = 0, k = v, I = y, D = M - 1; M > C && (x = b[C], !x.textAlign || "left" === x.textAlign);) pi(t, e, x, i, S, m, k, "left"),
      T -= x.width,
      k += x.width,
      C++;
      for (; D >= 0 && (x = b[D], "right" === x.textAlign);) pi(t, e, x, i, S, m, I, "right"),
      T -= x.width,
      I -= x.width,
      D--;
      for (k += (a - (k - v) - (y - I) - T) / 2; D >= C;) x = b[C],
      pi(t, e, x, i, S, m, k + x.width / 2, "center"),
      k += x.width,
      C++;
      m += S
    }
  }
  function di(t, e, n, i, r) {
    if (n && e.textRotation) {
      var a = e.textOrigin;
      "center" === a ? (i = n.width / 2 + n.x, r = n.height / 2 + n.y) : a && (i = a[0] + n.x, r = a[1] + n.y),
      t.translate(i, r),
      t.rotate( - e.textRotation),
      t.translate( - i, -r)
    }
  }
  function pi(t, e, n, i, r, a, o, s) {
    var l = i.rich[n.styleName] || {};
    l.text = n.text;
    var u = n.textVerticalAlign,
    h = a + r / 2;
    "top" === u ? h = a + n.height / 2 : "bottom" === u && (h = a + r - n.height / 2),
    !n.isLineHolder && gi(l) && vi(t, e, l, "right" === s ? o - n.width: "center" === s ? o - n.width / 2 : o, h - n.height / 2, n.width, n.height);
    var c = n.textPadding;
    c && (o = Mi(o, s, c), h -= n.height / 2 - c[2] - n.textHeight / 2),
    _i(e, "shadowBlur", A(l.textShadowBlur, i.textShadowBlur, 0)),
    _i(e, "shadowColor", l.textShadowColor || i.textShadowColor || "transparent"),
    _i(e, "shadowOffsetX", A(l.textShadowOffsetX, i.textShadowOffsetX, 0)),
    _i(e, "shadowOffsetY", A(l.textShadowOffsetY, i.textShadowOffsetY, 0)),
    _i(e, "textAlign", s),
    _i(e, "textBaseline", "middle"),
    _i(e, "font", n.font || zd);
    var f = xi(l.textStroke || i.textStroke, p),
    d = wi(l.textFill || i.textFill),
    p = D(l.textStrokeWidth, i.textStrokeWidth);
    f && (_i(e, "lineWidth", p), _i(e, "strokeStyle", f), e.strokeText(n.text, o, h)),
    d && (_i(e, "fillStyle", d), e.fillText(n.text, o, h))
  }
  function gi(t) {
    return !! (t.textBackgroundColor || t.textBorderWidth && t.textBorderColor)
  }
  function vi(t, e, n, i, r, a, o) {
    var s = n.textBackgroundColor,
    l = n.textBorderWidth,
    u = n.textBorderColor,
    h = b(s);
    if (_i(e, "shadowBlur", n.textBoxShadowBlur || 0), _i(e, "shadowColor", n.textBoxShadowColor || "transparent"), _i(e, "shadowOffsetX", n.textBoxShadowOffsetX || 0), _i(e, "shadowOffsetY", n.textBoxShadowOffsetY || 0), h || l && u) {
      e.beginPath();
      var c = n.textBorderRadius;
      c ? oi(e, {
        x: i,
        y: r,
        width: a,
        height: o,
        r: c
      }) : e.rect(i, r, a, o),
      e.closePath()
    }
    if (h) if (_i(e, "fillStyle", s), null != n.fillOpacity) {
      var f = e.globalAlpha;
      e.globalAlpha = n.fillOpacity * n.opacity,
      e.fill(),
      e.globalAlpha = f
    } else e.fill();
    else if (M(s)) {
      var d = s.image;
      d = Hn(d, null, t, mi, s),
      d && Wn(d) && e.drawImage(d, i, r, a, o)
    }
    if (l && u) if (_i(e, "lineWidth", l), _i(e, "strokeStyle", u), null != n.strokeOpacity) {
      var f = e.globalAlpha;
      e.globalAlpha = n.strokeOpacity * n.opacity,
      e.stroke(),
      e.globalAlpha = f
    } else e.stroke()
  }
  function mi(t, e) {
    e.image = t
  }
  function yi(t, e, n, i) {
    var r = n.x || 0,
    a = n.y || 0,
    o = n.textAlign,
    s = n.textVerticalAlign;
    if (i) {
      var l = n.textPosition;
      if (l instanceof Array) r = i.x + bi(l[0], i.width),
      a = i.y + bi(l[1], i.height);
      else {
        var u = e && e.calculateTextPosition ? e.calculateTextPosition(Vd, n, i) : Zn(Vd, n, i);
        r = u.x,
        a = u.y,
        o = o || u.textAlign,
        s = s || u.textVerticalAlign
      }
      var h = n.textOffset;
      h && (r += h[0], a += h[1])
    }
    return t = t || {},
    t.baseX = r,
    t.baseY = a,
    t.textAlign = o,
    t.textVerticalAlign = s,
    t
  }
  function _i(t, e, n) {
    return t[e] = _d(t, e, n),
    t[e]
  }
  function xi(t, e) {
    return null == t || 0 >= e || "transparent" === t || "none" === t ? null: t.image || t.colorStops ? "#000": t
  }
  function wi(t) {
    return null == t || "none" === t ? null: t.image || t.colorStops ? "#000": t
  }
  function bi(t, e) {
    return "string" == typeof t ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e: parseFloat(t) : t
  }
  function Mi(t, e, n) {
    return "right" === e ? t - n[1] : "center" === e ? t + n[3] / 2 - n[1] / 2 : t + n[3]
  }
  function Si(t, e) {
    return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding)
  }
  function Ti(t) {
    t = t || {},
    hd.call(this, t);
    for (var e in t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
    this.style = new Md(t.style, this),
    this._rect = null,
    this.__clipPaths = null
  }
  function Ci(t) {
    Ti.call(this, t)
  }
  function ki(t) {
    return parseInt(t, 10)
  }
  function Ii(t) {
    return t ? t.__builtin__ ? !0 : "function" != typeof t.resize || "function" != typeof t.refresh ? !1 : !0 : !1
  }
  function Di(t, e, n) {
    return Zd.copy(t.getBoundingRect()),
    t.transform && Zd.applyTransform(t.transform),
    $d.width = e,
    $d.height = n,
    !Zd.intersect($d)
  }
  function Ai(t, e) {
    if (t === e) return ! 1;
    if (!t || !e || t.length !== e.length) return ! 0;
    for (var n = 0; n < t.length; n++) if (t[n] !== e[n]) return ! 0;
    return ! 1
  }
  function Li(t, e) {
    for (var n = 0; n < t.length; n++) {
      var i = t[n];
      i.setTransform(e),
      e.beginPath(),
      i.buildPath(e, i.shape),
      e.clip(),
      i.restoreTransform(e)
    }
  }
  function Pi(t, e) {
    var n = document.createElement("div");
    return n.style.cssText = ["position:relative", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0", "border-width:0"].join(";") + ";",
    n
  }
  function Oi(t) {
    return "mousewheel" === t && tf.browser.firefox ? "DOMMouseScroll": t
  }
  function Ei(t) {
    var e = t.pointerType;
    return "pen" === e || "touch" === e
  }
  function Bi(t) {
    t.touching = !0,
    null != t.touchTimer && (clearTimeout(t.touchTimer), t.touchTimer = null),
    t.touchTimer = setTimeout(function() {
      t.touching = !1,
      t.touchTimer = null
    },
    700)
  }
  function Ri(t) {
    t && (t.zrByTouch = !0)
  }
  function zi(t, e) {
    return we(t.dom, new Ni(t, e), !0)
  }
  function Fi(t, e) {
    for (var n = e,
    i = !1; n && 9 !== n.nodeType && !(i = n.domBelongToZr || n !== e && n === t.painterRoot);) n = n.parentNode;
    return i
  }
  function Ni(t, e) {
    this.type = e.type,
    this.target = this.currentTarget = t.dom,
    this.pointerType = e.pointerType,
    this.clientX = e.clientX,
    this.clientY = e.clientY
  }
  function Hi(t, e) {
    var n = e.domHandlers;
    tf.pointerEventsSupported ? d(ep.pointer,
    function(i) {
      Wi(e, i,
      function(e) {
        n[i].call(t, e)
      })
    }) : (tf.touchEventsSupported && d(ep.touch,
    function(i) {
      Wi(e, i,
      function(r) {
        n[i].call(t, r),
        Bi(e)
      })
    }), d(ep.mouse,
    function(i) {
      Wi(e, i,
      function(r) {
        r = xe(r),
        e.touching || n[i].call(t, r)
      })
    }))
  }
  function Vi(t, e) {
    function n(n) {
      function i(i) {
        i = xe(i),
        Fi(t, i.target) || (i = zi(t, i), e.domHandlers[n].call(t, i))
      }
      Wi(e, n, i, {
        capture: !0
      })
    }
    tf.pointerEventsSupported ? d(np.pointer, n) : tf.touchEventsSupported || d(np.mouse, n)
  }
  function Wi(t, e, n, i) {
    t.mounted[e] = n,
    t.listenerOpts[e] = i,
    be(t.domTarget, Oi(e), n, i)
  }
  function Gi(t) {
    var e = t.mounted;
    for (var n in e) e.hasOwnProperty(n) && Me(t.domTarget, Oi(n), e[n], t.listenerOpts[n]);
    t.mounted = {}
  }
  function Xi(t, e) {
    if (t._mayPointerCapture = null, tp && t._pointerCapturing ^ e) {
      t._pointerCapturing = e;
      var n = t._globalHandlerScope;
      e ? Vi(t, n) : Gi(n)
    }
  }
  function qi(t, e) {
    this.domTarget = t,
    this.domHandlers = e,
    this.mounted = {},
    this.listenerOpts = {},
    this.touchTimer = null,
    this.touching = !1
  }
  function Ui(t, e) {
    Mf.call(this),
    this.dom = t,
    this.painterRoot = e,
    this._localHandlerScope = new qi(t, rp),
    tp && (this._globalHandlerScope = new qi(document, ap)),
    this._pointerCapturing = !1,
    this._mayPointerCapture = null,
    Hi(this, this._localHandlerScope)
  }
  function Yi(t, e) {
    var n = new cp(Kc(), t, e);
    return up[n.id] = n,
    n
  }
  function ji(t) {
    if (t) t.dispose();
    else {
      for (var e in up) up.hasOwnProperty(e) && up[e].dispose();
      up = {}
    }
    return this
  }
  function Zi(t) {
    return up[t]
  }
  function $i(t, e) {
    lp[t] = e
  }
  function Qi(t) {
    delete up[t]
  }
  function Ki(t) {
    return t instanceof Array ? t: null == t ? [] : [t]
  }
  function Ji(t, e, n) {
    if (t) {
      t[e] = t[e] || {},
      t.emphasis = t.emphasis || {},
      t.emphasis[e] = t.emphasis[e] || {};
      for (var i = 0,
      r = n.length; r > i; i++) {
        var a = n[i]; ! t.emphasis[e].hasOwnProperty(a) && t[e].hasOwnProperty(a) && (t.emphasis[e][a] = t[e][a])
      }
    }
  }
  function tr(t) {
    return ! pp(t) || gp(t) || t instanceof Date ? t: t.value
  }
  function er(t) {
    return pp(t) && !(t instanceof Array)
  }
  function nr(t, e) {
    e = (e || []).slice();
    var n = p(t || [],
    function(t) {
      return {
        exist: t
      }
    });
    return dp(e,
    function(t, i) {
      if (pp(t)) {
        for (var r = 0; r < n.length; r++) if (!n[r].option && null != t.id && n[r].exist.id === t.id + "") return n[r].option = t,
        void(e[i] = null);
        for (var r = 0; r < n.length; r++) {
          var a = n[r].exist;
          if (! (n[r].option || null != a.id && null != t.id || null == t.name || ar(t) || ar(a) || a.name !== t.name + "")) return n[r].option = t,
          void(e[i] = null)
        }
      }
    }),
    dp(e,
    function(t) {
      if (pp(t)) {
        for (var e = 0; e < n.length; e++) {
          var i = n[e].exist;
          if (!n[e].option && !ar(i) && null == t.id) {
            n[e].option = t;
            break
          }
        }
        e >= n.length && n.push({
          option: t
        })
      }
    }),
    n
  }
  function ir(t) {
    var e = F();
    dp(t,
    function(t) {
      var n = t.exist;
      n && e.set(n.id, t)
    }),
    dp(t,
    function(t) {
      var n = t.option;
      O(!n || null == n.id || !e.get(n.id) || e.get(n.id) === t, "id duplicates: " + (n && n.id)),
      n && null != n.id && e.set(n.id, t),
      !t.keyInfo && (t.keyInfo = {})
    }),
    dp(t,
    function(t, n) {
      var i = t.exist,
      r = t.option,
      a = t.keyInfo;
      if (pp(r)) {
        if (a.name = null != r.name ? r.name + "": i ? i.name: vp + n, i) a.id = i.id;
        else if (null != r.id) a.id = r.id + "";
        else {
          var o = 0;
          do a.id = "\x00" + a.name + "\x00" + o++;
          while (e.get(a.id))
        }
        e.set(a.id, t)
      }
    })
  }
  function rr(t) {
    var e = t.name;
    return ! (!e || !e.indexOf(vp))
  }
  function ar(t) {
    return pp(t) && t.id && 0 === (t.id + "").indexOf("\x00_ec_\x00")
  }
  function or(t, e) {
    return null != e.dataIndexInside ? e.dataIndexInside: null != e.dataIndex ? x(e.dataIndex) ? p(e.dataIndex,
    function(e) {
      return t.indexOfRawIndex(e)
    }) : t.indexOfRawIndex(e.dataIndex) : null != e.name ? x(e.name) ? p(e.name,
    function(e) {
      return t.indexOfName(e)
    }) : t.indexOfName(e.name) : void 0
  }
  function sr() {
    var t = "__\x00ec_inner_" + yp+++"_" + Math.random().toFixed(5);
    return function(e) {
      return e[t] || (e[t] = {})
    }
  }
  function lr(t, e, n) {
    if (b(e)) {
      var i = {};
      i[e + "Index"] = 0,
      e = i
    }
    var r = n && n.defaultMainType; ! r || ur(e, r + "Index") || ur(e, r + "Id") || ur(e, r + "Name") || (e[r + "Index"] = 0);
    var a = {};
    return dp(e,
    function(i, r) {
      var i = e[r];
      if ("dataIndex" === r || "dataIndexInside" === r) return void(a[r] = i);
      var o = r.match(/^(\w+)(Index|Id|Name)$/) || [],
      s = o[1],
      l = (o[2] || "").toLowerCase();
      if (! (!s || !l || null == i || "index" === l && "none" === i || n && n.includeMainTypes && u(n.includeMainTypes, s) < 0)) {
        var h = {
          mainType: s
        }; ("index" !== l || "all" !== i) && (h[l] = i);
        var c = t.queryComponents(h);
        a[s + "Models"] = c,
        a[s + "Model"] = c[0]
      }
    }),
    a
  }
  function ur(t, e) {
    return t && t.hasOwnProperty(e)
  }
  function hr(t, e, n) {
    t.setAttribute ? t.setAttribute(e, n) : t[e] = n
  }
  function cr(t, e) {
    return t.getAttribute ? t.getAttribute(e) : t[e]
  }
  function fr(t) {
    return "auto" === t ? tf.domSupported ? "html": "richText": t || "html"
  }
  function dr(t) {
    var e = {
      main: "",
      sub: ""
    };
    return t && (t = t.split(_p), e.main = t[0] || "", e.sub = t[1] || ""),
    e
  }
  function pr(t) {
    O(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal')
  }
  function gr(t) {
    t.$constructor = t,
    t.extend = function(t) {
      var e = this,
      n = function() {
        t.$constructor ? t.$constructor.apply(this, arguments) : e.apply(this, arguments)
      };
      return o(n.prototype, t),
      n.extend = this.extend,
      n.superCall = mr,
      n.superApply = yr,
      h(n, this),
      n.superClass = e,
      n
    }
  }
  function vr(t) {
    var e = ["__\x00is_clz", wp++, Math.random().toFixed(3)].join("_");
    t.prototype[e] = !0,
    t.isInstance = function(t) {
      return ! (!t || !t[e])
    }
  }
  function mr(t, e) {
    var n = L(arguments, 2);
    return this.superClass.prototype[e].apply(t, n)
  }
  function yr(t, e, n) {
    return this.superClass.prototype[e].apply(t, n)
  }
  function _r(t, e) {
    function n(t) {
      var e = i[t.main];
      return e && e[xp] || (e = i[t.main] = {},
      e[xp] = !0),
      e
    }
    e = e || {};
    var i = {};
    if (t.registerClass = function(t, e) {
      if (e) if (pr(e), e = dr(e), e.sub) {
        if (e.sub !== xp) {
          var r = n(e);
          r[e.sub] = t
        }
      } else i[e.main] = t;
      return t
    },
    t.getClass = function(t, e, n) {
      var r = i[t];
      if (r && r[xp] && (r = e ? r[e] : null), n && !r) throw new Error(e ? "Component " + t + "." + (e || "") + " not exists. Load it first.": t + ".type should be specified.");
      return r
    },
    t.getClassesByMainType = function(t) {
      t = dr(t);
      var e = [],
      n = i[t.main];
      return n && n[xp] ? d(n,
      function(t, n) {
        n !== xp && e.push(t)
      }) : e.push(n),
      e
    },
    t.hasClass = function(t) {
      return t = dr(t),
      !!i[t.main]
    },
    t.getAllClassMainTypes = function() {
      var t = [];
      return d(i,
      function(e, n) {
        t.push(n)
      }),
      t
    },
    t.hasSubTypes = function(t) {
      t = dr(t);
      var e = i[t.main];
      return e && e[xp]
    },
    t.parseClassType = dr, e.registerWhenExtend) {
      var r = t.extend;
      r && (t.extend = function(e) {
        var n = r.call(this, e);
        return t.registerClass(n, e.type)
      })
    }
    return t
  }
  function xr(t) {
    return t > -Dp && Dp > t
  }
  function wr(t) {
    return t > Dp || -Dp > t
  }
  function br(t, e, n, i, r) {
    var a = 1 - r;
    return a * a * (a * t + 3 * r * e) + r * r * (r * i + 3 * a * n)
  }
  function Mr(t, e, n, i, r) {
    var a = 1 - r;
    return 3 * (((e - t) * a + 2 * (n - e) * r) * a + (i - n) * r * r)
  }
  function Sr(t, e, n, i, r, a) {
    var o = i + 3 * (e - n) - t,
    s = 3 * (n - 2 * e + t),
    l = 3 * (e - t),
    u = t - r,
    h = s * s - 3 * o * l,
    c = s * l - 9 * o * u,
    f = l * l - 3 * s * u,
    d = 0;
    if (xr(h) && xr(c)) if (xr(s)) a[0] = 0;
    else {
      var p = -l / s;
      p >= 0 && 1 >= p && (a[d++] = p)
    } else {
      var g = c * c - 4 * h * f;
      if (xr(g)) {
        var v = c / h,
        p = -s / o + v,
        m = -v / 2;
        p >= 0 && 1 >= p && (a[d++] = p),
        m >= 0 && 1 >= m && (a[d++] = m)
      } else if (g > 0) {
        var y = Ip(g),
        _ = h * s + 1.5 * o * ( - c + y),
        x = h * s + 1.5 * o * ( - c - y);
        _ = 0 > _ ? -kp( - _, Pp) : kp(_, Pp),
        x = 0 > x ? -kp( - x, Pp) : kp(x, Pp);
        var p = ( - s - (_ + x)) / (3 * o);
        p >= 0 && 1 >= p && (a[d++] = p)
      } else {
        var w = (2 * h * s - 3 * o * c) / (2 * Ip(h * h * h)),
        b = Math.acos(w) / 3,
        M = Ip(h),
        S = Math.cos(b),
        p = ( - s - 2 * M * S) / (3 * o),
        m = ( - s + M * (S + Lp * Math.sin(b))) / (3 * o),
        T = ( - s + M * (S - Lp * Math.sin(b))) / (3 * o);
        p >= 0 && 1 >= p && (a[d++] = p),
        m >= 0 && 1 >= m && (a[d++] = m),
        T >= 0 && 1 >= T && (a[d++] = T)
      }
    }
    return d
  }
  function Tr(t, e, n, i, r) {
    var a = 6 * n - 12 * e + 6 * t,
    o = 9 * e + 3 * i - 3 * t - 9 * n,
    s = 3 * e - 3 * t,
    l = 0;
    if (xr(o)) {
      if (wr(a)) {
        var u = -s / a;
        u >= 0 && 1 >= u && (r[l++] = u)
      }
    } else {
      var h = a * a - 4 * o * s;
      if (xr(h)) r[0] = -a / (2 * o);
      else if (h > 0) {
        var c = Ip(h),
        u = ( - a + c) / (2 * o),
        f = ( - a - c) / (2 * o);
        u >= 0 && 1 >= u && (r[l++] = u),
        f >= 0 && 1 >= f && (r[l++] = f)
      }
    }
    return l
  }
  function Cr(t, e, n, i, r, a) {
    var o = (e - t) * r + t,
    s = (n - e) * r + e,
    l = (i - n) * r + n,
    u = (s - o) * r + o,
    h = (l - s) * r + s,
    c = (h - u) * r + u;
    a[0] = t,
    a[1] = o,
    a[2] = u,
    a[3] = c,
    a[4] = c,
    a[5] = h,
    a[6] = l,
    a[7] = i
  }
  function kr(t, e, n, i, r, a, o, s, l, u, h) {
    var c, f, d, p, g, v = .005,
    m = 1 / 0;
    Op[0] = l,
    Op[1] = u;
    for (var y = 0; 1 > y; y += .05) Ep[0] = br(t, n, r, o, y),
    Ep[1] = br(e, i, a, s, y),
    p = xf(Op, Ep),
    m > p && (c = y, m = p);
    m = 1 / 0;
    for (var _ = 0; 32 > _ && !(Ap > v); _++) f = c - v,
    d = c + v,
    Ep[0] = br(t, n, r, o, f),
    Ep[1] = br(e, i, a, s, f),
    p = xf(Ep, Op),
    f >= 0 && m > p ? (c = f, m = p) : (Bp[0] = br(t, n, r, o, d), Bp[1] = br(e, i, a, s, d), g = xf(Bp, Op), 1 >= d && m > g ? (c = d, m = g) : v *= .5);
    return h && (h[0] = br(t, n, r, o, c), h[1] = br(e, i, a, s, c)),
    Ip(m)
  }
  function Ir(t, e, n, i) {
    var r = 1 - i;
    return r * (r * t + 2 * i * e) + i * i * n
  }
  function Dr(t, e, n, i) {
    return 2 * ((1 - i) * (e - t) + i * (n - e))
  }
  function Ar(t, e, n, i, r) {
    var a = t - 2 * e + n,
    o = 2 * (e - t),
    s = t - i,
    l = 0;
    if (xr(a)) {
      if (wr(o)) {
        var u = -s / o;
        u >= 0 && 1 >= u && (r[l++] = u)
      }
    } else {
      var h = o * o - 4 * a * s;
      if (xr(h)) {
        var u = -o / (2 * a);
        u >= 0 && 1 >= u && (r[l++] = u)
      } else if (h > 0) {
        var c = Ip(h),
        u = ( - o + c) / (2 * a),
        f = ( - o - c) / (2 * a);
        u >= 0 && 1 >= u && (r[l++] = u),
        f >= 0 && 1 >= f && (r[l++] = f)
      }
    }
    return l
  }
  function Lr(t, e, n) {
    var i = t + n - 2 * e;
    return 0 === i ? .5 : (t - e) / i
  }
  function Pr(t, e, n, i, r) {
    var a = (e - t) * i + t,
    o = (n - e) * i + e,
    s = (o - a) * i + a;
    r[0] = t,
    r[1] = a,
    r[2] = s,
    r[3] = s,
    r[4] = o,
    r[5] = n
  }
  function Or(t, e, n, i, r, a, o, s, l) {
    var u, h = .005,
    c = 1 / 0;
    Op[0] = o,
    Op[1] = s;
    for (var f = 0; 1 > f; f += .05) {
      Ep[0] = Ir(t, n, r, f),
      Ep[1] = Ir(e, i, a, f);
      var d = xf(Op, Ep);
      c > d && (u = f, c = d)
    }
    c = 1 / 0;
    for (var p = 0; 32 > p && !(Ap > h); p++) {
      var g = u - h,
      v = u + h;
      Ep[0] = Ir(t, n, r, g),
      Ep[1] = Ir(e, i, a, g);
      var d = xf(Ep, Op);
      if (g >= 0 && c > d) u = g,
      c = d;
      else {
        Bp[0] = Ir(t, n, r, v),
        Bp[1] = Ir(e, i, a, v);
        var m = xf(Bp, Op);
        1 >= v && c > m ? (u = v, c = m) : h *= .5
      }
    }
    return l && (l[0] = Ir(t, n, r, u), l[1] = Ir(e, i, a, u)),
    Ip(c)
  }
  function Er(t, e, n) {
    if (0 !== t.length) {
      var i, r = t[0],
      a = r[0],
      o = r[0],
      s = r[1],
      l = r[1];
      for (i = 1; i < t.length; i++) r = t[i],
      a = Rp(a, r[0]),
      o = zp(o, r[0]),
      s = Rp(s, r[1]),
      l = zp(l, r[1]);
      e[0] = a,
      e[1] = s,
      n[0] = o,
      n[1] = l
    }
  }
  function Br(t, e, n, i, r, a) {
    r[0] = Rp(t, n),
    r[1] = Rp(e, i),
    a[0] = zp(t, n),
    a[1] = zp(e, i)
  }
  function Rr(t, e, n, i, r, a, o, s, l, u) {
    var h, c = Tr,
    f = br,
    d = c(t, n, r, o, Xp);
    for (l[0] = 1 / 0, l[1] = 1 / 0, u[0] = -1 / 0, u[1] = -1 / 0, h = 0; d > h; h++) {
      var p = f(t, n, r, o, Xp[h]);
      l[0] = Rp(p, l[0]),
      u[0] = zp(p, u[0])
    }
    for (d = c(e, i, a, s, qp), h = 0; d > h; h++) {
      var g = f(e, i, a, s, qp[h]);
      l[1] = Rp(g, l[1]),
      u[1] = zp(g, u[1])
    }
    l[0] = Rp(t, l[0]),
    u[0] = zp(t, u[0]),
    l[0] = Rp(o, l[0]),
    u[0] = zp(o, u[0]),
    l[1] = Rp(e, l[1]),
    u[1] = zp(e, u[1]),
    l[1] = Rp(s, l[1]),
    u[1] = zp(s, u[1])
  }
  function zr(t, e, n, i, r, a, o, s) {
    var l = Lr,
    u = Ir,
    h = zp(Rp(l(t, n, r), 1), 0),
    c = zp(Rp(l(e, i, a), 1), 0),
    f = u(t, n, r, h),
    d = u(e, i, a, c);
    o[0] = Rp(t, r, f),
    o[1] = Rp(e, a, d),
    s[0] = zp(t, r, f),
    s[1] = zp(e, a, d)
  }
  function Fr(t, e, n, i, r, a, o, s, l) {
    var u = oe,
    h = se,
    c = Math.abs(r - a);
    if (1e-4 > c % Hp && c > 1e-4) return s[0] = t - n,
    s[1] = e - i,
    l[0] = t + n,
    void(l[1] = e + i);
    if (Vp[0] = Np(r) * n + t, Vp[1] = Fp(r) * i + e, Wp[0] = Np(a) * n + t, Wp[1] = Fp(a) * i + e, u(s, Vp, Wp), h(l, Vp, Wp), r %= Hp, 0 > r && (r += Hp), a %= Hp, 0 > a && (a += Hp), r > a && !o ? a += Hp: a > r && o && (r += Hp), o) {
      var f = a;
      a = r,
      r = f
    }
    for (var d = 0; a > d; d += Math.PI / 2) d > r && (Gp[0] = Np(d) * n + t, Gp[1] = Fp(d) * i + e, u(s, Gp, s), h(l, Gp, l))
  }
  function Nr(t, e, n, i, r, a, o) {
    if (0 === r) return ! 1;
    var s = r,
    l = 0,
    u = t;
    if (o > e + s && o > i + s || e - s > o && i - s > o || a > t + s && a > n + s || t - s > a && n - s > a) return ! 1;
    if (t === n) return Math.abs(a - t) <= s / 2;
    l = (e - i) / (t - n),
    u = (t * i - n * e) / (t - n);
    var h = l * a - o + u,
    c = h * h / (l * l + 1);
    return s / 2 * s / 2 >= c
  }
  function Hr(t, e, n, i, r, a, o, s, l, u, h) {
    if (0 === l) return ! 1;
    var c = l;
    if (h > e + c && h > i + c && h > a + c && h > s + c || e - c > h && i - c > h && a - c > h && s - c > h || u > t + c && u > n + c && u > r + c && u > o + c || t - c > u && n - c > u && r - c > u && o - c > u) return ! 1;
    var f = kr(t, e, n, i, r, a, o, s, u, h, null);
    return c / 2 >= f
  }
  function Vr(t, e, n, i, r, a, o, s, l) {
    if (0 === o) return ! 1;
    var u = o;
    if (l > e + u && l > i + u && l > a + u || e - u > l && i - u > l && a - u > l || s > t + u && s > n + u && s > r + u || t - u > s && n - u > s && r - u > s) return ! 1;
    var h = Or(t, e, n, i, r, a, s, l, null);
    return u / 2 >= h
  }
  function Wr(t) {
    return t %= ag,
    0 > t && (t += ag),
    t
  }
  function Gr(t, e, n, i, r, a, o, s, l) {
    if (0 === o) return ! 1;
    var u = o;
    s -= t,
    l -= e;
    var h = Math.sqrt(s * s + l * l);
    if (h - u > n || n > h + u) return ! 1;
    if (Math.abs(i - r) % og < 1e-4) return ! 0;
    if (a) {
      var c = i;
      i = Wr(r),
      r = Wr(c)
    } else i = Wr(i),
    r = Wr(r);
    i > r && (r += og);
    var f = Math.atan2(l, s);
    return 0 > f && (f += og),
    f >= i && r >= f || f + og >= i && r >= f + og
  }
  function Xr(t, e, n, i, r, a) {
    if (a > e && a > i || e > a && i > a) return 0;
    if (i === e) return 0;
    var o = e > i ? 1 : -1,
    s = (a - e) / (i - e); (1 === s || 0 === s) && (o = e > i ? .5 : -.5);
    var l = s * (n - t) + t;
    return l === r ? 1 / 0 : l > r ? o: 0
  }
  function qr(t, e) {
    return Math.abs(t - e) < ug
  }
  function Ur() {
    var t = cg[0];
    cg[0] = cg[1],
    cg[1] = t
  }
  function Yr(t, e, n, i, r, a, o, s, l, u) {
    if (u > e && u > i && u > a && u > s || e > u && i > u && a > u && s > u) return 0;
    var h = Sr(e, i, a, s, u, hg);
    if (0 === h) return 0;
    for (var c, f, d = 0,
    p = -1,
    g = 0; h > g; g++) {
      var v = hg[g],
      m = 0 === v || 1 === v ? .5 : 1,
      y = br(t, n, r, o, v);
      l > y || (0 > p && (p = Tr(e, i, a, s, cg), cg[1] < cg[0] && p > 1 && Ur(), c = br(e, i, a, s, cg[0]), p > 1 && (f = br(e, i, a, s, cg[1]))), d += 2 === p ? v < cg[0] ? e > c ? m: -m: v < cg[1] ? c > f ? m: -m: f > s ? m: -m: v < cg[0] ? e > c ? m: -m: c > s ? m: -m)
    }
    return d
  }
  function jr(t, e, n, i, r, a, o, s) {
    if (s > e && s > i && s > a || e > s && i > s && a > s) return 0;
    var l = Ar(e, i, a, s, hg);
    if (0 === l) return 0;
    var u = Lr(e, i, a);
    if (u >= 0 && 1 >= u) {
      for (var h = 0,
      c = Ir(e, i, a, u), f = 0; l > f; f++) {
        var d = 0 === hg[f] || 1 === hg[f] ? .5 : 1,
        p = Ir(t, n, r, hg[f]);
        o > p || (h += hg[f] < u ? e > c ? d: -d: c > a ? d: -d)
      }
      return h
    }
    var d = 0 === hg[0] || 1 === hg[0] ? .5 : 1,
    p = Ir(t, n, r, hg[0]);
    return o > p ? 0 : e > a ? d: -d
  }
  function Zr(t, e, n, i, r, a, o, s) {
    if (s -= e, s > n || -n > s) return 0;
    var l = Math.sqrt(n * n - s * s);
    hg[0] = -l,
    hg[1] = l;
    var u = Math.abs(i - r);
    if (1e-4 > u) return 0;
    if (1e-4 > u % lg) {
      i = 0,
      r = lg;
      var h = a ? 1 : -1;
      return o >= hg[0] + t && o <= hg[1] + t ? h: 0
    }
    if (a) {
      var l = i;
      i = Wr(r),
      r = Wr(l)
    } else i = Wr(i),
    r = Wr(r);
    i > r && (r += lg);
    for (var c = 0,
    f = 0; 2 > f; f++) {
      var d = hg[f];
      if (d + t > o) {
        var p = Math.atan2(s, d),
        h = a ? 1 : -1;
        0 > p && (p = lg + p),
        (p >= i && r >= p || p + lg >= i && r >= p + lg) && (p > Math.PI / 2 && p < 1.5 * Math.PI && (h = -h), c += h)
      }
    }
    return c
  }
  function $r(t, e, n, i, r) {
    for (var a = 0,
    o = 0,
    s = 0,
    l = 0,
    u = 0,
    h = 0; h < t.length;) {
      var c = t[h++];
      switch (c === sg.M && h > 1 && (n || (a += Xr(o, s, l, u, i, r))), 1 === h && (o = t[h], s = t[h + 1], l = o, u = s), c) {
      case sg.M:
        l = t[h++],
        u = t[h++],
        o = l,
        s = u;
        break;
      case sg.L:
        if (n) {
          if (Nr(o, s, t[h], t[h + 1], e, i, r)) return ! 0
        } else a += Xr(o, s, t[h], t[h + 1], i, r) || 0;
        o = t[h++],
        s = t[h++];
        break;
      case sg.C:
        if (n) {
          if (Hr(o, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], e, i, r)) return ! 0
        } else a += Yr(o, s, t[h++], t[h++], t[h++], t[h++], t[h], t[h + 1], i, r) || 0;
        o = t[h++],
        s = t[h++];
        break;
      case sg.Q:
        if (n) {
          if (Vr(o, s, t[h++], t[h++], t[h], t[h + 1], e, i, r)) return ! 0
        } else a += jr(o, s, t[h++], t[h++], t[h], t[h + 1], i, r) || 0;
        o = t[h++],
        s = t[h++];
        break;
      case sg.A:
        var f = t[h++],
        d = t[h++],
        p = t[h++],
        g = t[h++],
        v = t[h++],
        m = t[h++];
        h += 1;
        var y = 1 - t[h++],
        _ = Math.cos(v) * p + f,
        x = Math.sin(v) * g + d;
        h > 1 ? a += Xr(o, s, _, x, i, r) : (l = _, u = x);
        var w = (i - f) * g / p + f;
        if (n) {
          if (Gr(f, d, g, v, v + m, y, e, w, r)) return ! 0
        } else a += Zr(f, d, g, v, v + m, y, w, r);
        o = Math.cos(v + m) * p + f,
        s = Math.sin(v + m) * g + d;
        break;
      case sg.R:
        l = o = t[h++],
        u = s = t[h++];
        var b = t[h++],
        M = t[h++],
        _ = l + b,
        x = u + M;
        if (n) {
          if (Nr(l, u, _, u, e, i, r) || Nr(_, u, _, x, e, i, r) || Nr(_, x, l, x, e, i, r) || Nr(l, x, l, u, e, i, r)) return ! 0
        } else a += Xr(_, u, _, x, i, r),
        a += Xr(l, x, l, u, i, r);
        break;
      case sg.Z:
        if (n) {
          if (Nr(o, s, l, u, e, i, r)) return ! 0
        } else a += Xr(o, s, l, u, i, r);
        o = l,
        s = u
      }
    }
    return n || qr(s, u) || (a += Xr(o, s, l, u, i, r) || 0),
    0 !== a
  }
  function Qr(t, e, n) {
    return $r(t, 0, !1, e, n)
  }
  function Kr(t, e, n, i) {
    return $r(t, e, !0, n, i)
  }
  function Jr(t) {
    Ti.call(this, t),
    this.path = null
  }
  function ta(t, e, n, i, r, a, o, s, l, u, h) {
    var c = l * (Mg / 180),
    f = bg(c) * (t - n) / 2 + wg(c) * (e - i) / 2,
    d = -1 * wg(c) * (t - n) / 2 + bg(c) * (e - i) / 2,
    p = f * f / (o * o) + d * d / (s * s);
    p > 1 && (o *= xg(p), s *= xg(p));
    var g = (r === a ? -1 : 1) * xg((o * o * s * s - o * o * d * d - s * s * f * f) / (o * o * d * d + s * s * f * f)) || 0,
    v = g * o * d / s,
    m = g * -s * f / o,
    y = (t + n) / 2 + bg(c) * v - wg(c) * m,
    _ = (e + i) / 2 + wg(c) * v + bg(c) * m,
    x = Cg([1, 0], [(f - v) / o, (d - m) / s]),
    w = [(f - v) / o, (d - m) / s],
    b = [( - 1 * f - v) / o, ( - 1 * d - m) / s],
    M = Cg(w, b);
    Tg(w, b) <= -1 && (M = Mg),
    Tg(w, b) >= 1 && (M = 0),
    0 === a && M > 0 && (M -= 2 * Mg),
    1 === a && 0 > M && (M += 2 * Mg),
    h.addData(u, y, _, o, s, x, M, c, a)
  }
  function ea(t) {
    if (!t) return new rg;
    for (var e, n = 0,
    i = 0,
    r = n,
    a = i,
    o = new rg,
    s = rg.CMD,
    l = t.match(kg), u = 0; u < l.length; u++) {
      for (var h, c = l[u], f = c.charAt(0), d = c.match(Ig) || [], p = d.length, g = 0; p > g; g++) d[g] = parseFloat(d[g]);
      for (var v = 0; p > v;) {
        var m, y, _, x, w, b, M, S = n,
        T = i;
        switch (f) {
        case "l":
          n += d[v++],
          i += d[v++],
          h = s.L,
          o.addData(h, n, i);
          break;
        case "L":
          n = d[v++],
          i = d[v++],
          h = s.L,
          o.addData(h, n, i);
          break;
        case "m":
          n += d[v++],
          i += d[v++],
          h = s.M,
          o.addData(h, n, i),
          r = n,
          a = i,
          f = "l";
          break;
        case "M":
          n = d[v++],
          i = d[v++],
          h = s.M,
          o.addData(h, n, i),
          r = n,
          a = i,
          f = "L";
          break;
        case "h":
          n += d[v++],
          h = s.L,
          o.addData(h, n, i);
          break;
        case "H":
          n = d[v++],
          h = s.L,
          o.addData(h, n, i);
          break;
        case "v":
          i += d[v++],
          h = s.L,
          o.addData(h, n, i);
          break;
        case "V":
          i = d[v++],
          h = s.L,
          o.addData(h, n, i);
          break;
        case "C":
          h = s.C,
          o.addData(h, d[v++], d[v++], d[v++], d[v++], d[v++], d[v++]),
          n = d[v - 2],
          i = d[v - 1];
          break;
        case "c":
          h = s.C,
          o.addData(h, d[v++] + n, d[v++] + i, d[v++] + n, d[v++] + i, d[v++] + n, d[v++] + i),
          n += d[v - 2],
          i += d[v - 1];
          break;
        case "S":
          m = n,
          y = i;
          var C = o.len(),
          k = o.data;
          e === s.C && (m += n - k[C - 4], y += i - k[C - 3]),
          h = s.C,
          S = d[v++],
          T = d[v++],
          n = d[v++],
          i = d[v++],
          o.addData(h, m, y, S, T, n, i);
          break;
        case "s":
          m = n,
          y = i;
          var C = o.len(),
          k = o.data;
          e === s.C && (m += n - k[C - 4], y += i - k[C - 3]),
          h = s.C,
          S = n + d[v++],
          T = i + d[v++],
          n += d[v++],
          i += d[v++],
          o.addData(h, m, y, S, T, n, i);
          break;
        case "Q":
          S = d[v++],
          T = d[v++],
          n = d[v++],
          i = d[v++],
          h = s.Q,
          o.addData(h, S, T, n, i);
          break;
        case "q":
          S = d[v++] + n,
          T = d[v++] + i,
          n += d[v++],
          i += d[v++],
          h = s.Q,
          o.addData(h, S, T, n, i);
          break;
        case "T":
          m = n,
          y = i;
          var C = o.len(),
          k = o.data;
          e === s.Q && (m += n - k[C - 4], y += i - k[C - 3]),
          n = d[v++],
          i = d[v++],
          h = s.Q,
          o.addData(h, m, y, n, i);
          break;
        case "t":
          m = n,
          y = i;
          var C = o.len(),
          k = o.data;
          e === s.Q && (m += n - k[C - 4], y += i - k[C - 3]),
          n += d[v++],
          i += d[v++],
          h = s.Q,
          o.addData(h, m, y, n, i);
          break;
        case "A":
          _ = d[v++],
          x = d[v++],
          w = d[v++],
          b = d[v++],
          M = d[v++],
          S = n,
          T = i,
          n = d[v++],
          i = d[v++],
          h = s.A,
          ta(S, T, n, i, b, M, _, x, w, h, o);
          break;
        case "a":
          _ = d[v++],
          x = d[v++],
          w = d[v++],
          b = d[v++],
          M = d[v++],
          S = n,
          T = i,
          n += d[v++],
          i += d[v++],
          h = s.A,
          ta(S, T, n, i, b, M, _, x, w, h, o)
        }
      } ("z" === f || "Z" === f) && (h = s.Z, o.addData(h), n = r, i = a),
      e = h
    }
    return o.toStatic(),
    o
  }
  function na(t, e) {
    var n = ea(t);
    return e = e || {},
    e.buildPath = function(t) {
      if (t.setData) {
        t.setData(n.data);
        var e = t.getContext();
        e && t.rebuildPath(e)
      } else {
        var e = t;
        n.rebuildPath(e)
      }
    },
    e.applyTransform = function(t) {
      _g(n, t),
      this.dirty(!0)
    },
    e
  }
  function ia(t, e) {
    return new Jr(na(t, e))
  }
  function ra(t, e) {
    return Jr.extend(na(t, e))
  }
  function aa(t, e) {
    for (var n = [], i = t.length, r = 0; i > r; r++) {
      var a = t[r];
      a.path || a.createPathProxy(),
      a.__dirtyPath && a.buildPath(a.path, a.shape, !0),
      n.push(a.path)
    }
    var o = new Jr(e);
    return o.createPathProxy(),
    o.buildPath = function(t) {
      t.appendPath(n);
      var e = t.getContext();
      e && t.rebuildPath(e)
    },
    o
  }
  function oa(t, e, n, i, r, a, o) {
    var s = .5 * (n - t),
    l = .5 * (i - e);
    return (2 * (e - n) + s + l) * o + ( - 3 * (e - n) - 2 * s - l) * a + s * r + e
  }
  function sa(t, e, n) {
    var i = e.points,
    r = e.smooth;
    if (i && i.length >= 2) {
      if (r && "spline" !== r) {
        var a = Rg(i, r, n, e.smoothConstraint);
        t.moveTo(i[0][0], i[0][1]);
        for (var o = i.length,
        s = 0; (n ? o: o - 1) > s; s++) {
          var l = a[2 * s],
          u = a[2 * s + 1],
          h = i[(s + 1) % o];
          t.bezierCurveTo(l[0], l[1], u[0], u[1], h[0], h[1])
        }
      } else {
        "spline" === r && (i = Bg(i, n)),
        t.moveTo(i[0][0], i[0][1]);
        for (var s = 1,
        c = i.length; c > s; s++) t.lineTo(i[s][0], i[s][1])
      }
      n && t.closePath()
    }
  }
  function la(t, e, n) {
    if (e) {
      var i = e.x1,
      r = e.x2,
      a = e.y1,
      o = e.y2;
      t.x1 = i,
      t.x2 = r,
      t.y1 = a,
      t.y2 = o;
      var s = n && n.lineWidth;
      s && (Ng(2 * i) === Ng(2 * r) && (t.x1 = t.x2 = ha(i, s, !0)), Ng(2 * a) === Ng(2 * o) && (t.y1 = t.y2 = ha(a, s, !0)))
    }
  }
  function ua(t, e, n) {
    if (e) {
      var i = e.x,
      r = e.y,
      a = e.width,
      o = e.height;
      t.x = i,
      t.y = r,
      t.width = a,
      t.height = o;
      var s = n && n.lineWidth;
      s && (t.x = ha(i, s, !0), t.y = ha(r, s, !0), t.width = Math.max(ha(i + a, s, !1) - t.x, 0 === a ? 0 : 1), t.height = Math.max(ha(r + o, s, !1) - t.y, 0 === o ? 0 : 1))
    }
  }
  function ha(t, e, n) {
    if (!e) return t;
    var i = Ng(2 * t);
    return (i + Ng(e)) % 2 === 0 ? i / 2 : (i + (n ? 1 : -1)) / 2
  }
  function ca(t, e, n) {
    var i = t.cpx2,
    r = t.cpy2;
    return null === i || null === r ? [(n ? Mr: br)(t.x1, t.cpx1, t.cpx2, t.x2, e), (n ? Mr: br)(t.y1, t.cpy1, t.cpy2, t.y2, e)] : [(n ? Dr: Ir)(t.x1, t.cpx1, t.x2, e), (n ? Dr: Ir)(t.y1, t.cpy1, t.y2, e)]
  }
  function fa(t) {
    Ti.call(this, t),
    this._displayables = [],
    this._temporaryDisplayables = [],
    this._cursor = 0,
    this.notClear = !0
  }
  function da(t) {
    return Jr.extend(t)
  }
  function pa(t, e) {
    return ra(t, e)
  }
  function ga(t, e) {
    sv[t] = e
  }
  function va(t) {
    return sv.hasOwnProperty(t) ? sv[t] : void 0
  }
  function ma(t, e, n, i) {
    var r = ia(t, e);
    return n && ("center" === i && (n = _a(n, r.getBoundingRect())), xa(r, n)),
    r
  }
  function ya(t, e, n) {
    var i = new Ci({
      style: {
        image: t,
        x: e.x,
        y: e.y,
        width: e.width,
        height: e.height
      },
      onload: function(t) {
        if ("center" === n) {
          var r = {
            width: t.width,
            height: t.height
          };
          i.setStyle(_a(e, r))
        }
      }
    });
    return i
  }
  function _a(t, e) {
    var n, i = e.width / e.height,
    r = t.height * i;
    r <= t.width ? n = t.height: (r = t.width, n = r / i);
    var a = t.x + t.width / 2,
    o = t.y + t.height / 2;
    return {
      x: a - r / 2,
      y: o - n / 2,
      width: r,
      height: n
    }
  }
  function xa(t, e) {
    if (t.applyTransform) {
      var n = t.getBoundingRect(),
      i = n.calculateTransform(e);
      t.applyTransform(i)
    }
  }
  function wa(t) {
    return la(t.shape, t.shape, t.style),
    t
  }
  function ba(t) {
    return ua(t.shape, t.shape, t.style),
    t
  }
  function Ma(t) {
    return null != t && "none" !== t
  }
  function Sa(t) {
    if ("string" != typeof t) return t;
    var e = hv.get(t);
    return e || (e = en(t, -.1), 1e4 > cv && (hv.set(t, e), cv++)),
    e
  }
  function Ta(t) {
    if (t.__hoverStlDirty) {
      t.__hoverStlDirty = !1;
      var e = t.__hoverStl;
      if (!e) return void(t.__cachedNormalStl = t.__cachedNormalZ2 = null);
      var n = t.__cachedNormalStl = {};
      t.__cachedNormalZ2 = t.z2;
      var i = t.style;
      for (var r in e) null != e[r] && (n[r] = i[r]);
      n.fill = i.fill,
      n.stroke = i.stroke
    }
  }
  function Ca(t) {
    var e = t.__hoverStl;
    if (e && !t.__highlighted) {
      var n = t.__zr,
      i = t.useHoverLayer && n && "canvas" === n.painter.type;
      if (t.__highlighted = i ? "layer": "plain", !(t.isGroup || !n && t.useHoverLayer)) {
        var r = t,
        a = t.style;
        i && (r = n.addHover(t), a = r.style),
        Za(a),
        i || Ta(r),
        a.extendFrom(e),
        ka(a, e, "fill"),
        ka(a, e, "stroke"),
        ja(a),
        i || (t.dirty(!1), t.z2 += ev)
      }
    }
  }
  function ka(t, e, n) { ! Ma(e[n]) && Ma(t[n]) && (t[n] = Sa(t[n]))
  }
  function Ia(t) {
    var e = t.__highlighted;
    if (e && (t.__highlighted = !1, !t.isGroup)) if ("layer" === e) t.__zr && t.__zr.removeHover(t);
    else {
      var n = t.style,
      i = t.__cachedNormalStl;
      i && (Za(n), t.setStyle(i), ja(n));
      var r = t.__cachedNormalZ2;
      null != r && t.z2 - r === ev && (t.z2 = r)
    }
  }
  function Da(t, e, n) {
    var i, r = rv,
    a = rv;
    t.__highlighted && (r = iv, i = !0),
    e(t, n),
    t.__highlighted && (a = iv, i = !0),
    t.isGroup && t.traverse(function(t) { ! t.isGroup && e(t, n)
    }),
    i && t.__highDownOnUpdate && t.__highDownOnUpdate(r, a)
  }
  function Aa(t, e) {
    e = t.__hoverStl = e !== !1 && (t.hoverStyle || e || {}),
    t.__hoverStlDirty = !0,
    t.__highlighted && (t.__cachedNormalStl = null, Ia(t), Ca(t))
  }
  function La(t) { ! Ba(this, t) && !this.__highByOuter && Da(this, Ca)
  }
  function Pa(t) { ! Ba(this, t) && !this.__highByOuter && Da(this, Ia)
  }
  function Oa(t) {
    this.__highByOuter |= 1 << (t || 0),
    Da(this, Ca)
  }
  function Ea(t) { ! (this.__highByOuter &= ~ (1 << (t || 0))) && Da(this, Ia)
  }
  function Ba(t, e) {
    return t.__highDownSilentOnTouch && e.zrByTouch
  }
  function Ra(t, e) {
    za(t, !0),
    Da(t, Aa, e)
  }
  function za(t, e) {
    var n = e === !1;
    if (t.__highDownSilentOnTouch = t.highDownSilentOnTouch, t.__highDownOnUpdate = t.highDownOnUpdate, !n || t.__highDownDispatcher) {
      var i = n ? "off": "on";
      t[i]("mouseover", La)[i]("mouseout", Pa),
      t[i]("emphasis", Oa)[i]("normal", Ea),
      t.__highByOuter = t.__highByOuter || 0,
      t.__highDownDispatcher = !n
    }
  }
  function Fa(t) {
    return ! (!t || !t.__highDownDispatcher)
  }
  function Na(t) {
    var e = ov[t];
    return null == e && 32 >= av && (e = ov[t] = av++),
    e
  }
  function Ha(t, e, n, i, r, a, o) {
    r = r || tv;
    var s, l = r.labelFetcher,
    u = r.labelDataIndex,
    h = r.labelDimIndex,
    c = r.labelProp,
    f = n.getShallow("show"),
    d = i.getShallow("show"); (f || d) && (l && (s = l.getFormattedLabel(u, "normal", null, h, c)), null == s && (s = w(r.defaultText) ? r.defaultText(u, r) : r.defaultText));
    var p = f ? s: null,
    g = d ? D(l ? l.getFormattedLabel(u, "emphasis", null, h, c) : null, s) : null; (null != p || null != g) && (Wa(t, n, a, r), Wa(e, i, o, r, !0)),
    t.text = p,
    e.text = g
  }
  function Va(t, e, n) {
    var i = t.style;
    e && (Za(i), t.setStyle(e), ja(i)),
    i = t.__hoverStl,
    n && i && (Za(i), o(i, n), ja(i))
  }
  function Wa(t, e, n, i, r) {
    return Xa(t, e, i, r),
    n && o(t, n),
    t
  }
  function Ga(t, e, n) {
    var i, r = {
      isRectText: !0
    };
    n === !1 ? i = !0 : r.autoColor = n,
    Xa(t, e, r, i)
  }
  function Xa(t, e, n, i) {
    if (n = n || tv, n.isRectText) {
      var r;
      n.getTextPosition ? r = n.getTextPosition(e, i) : (r = e.getShallow("position") || (i ? null: "inside"), "outside" === r && (r = "top")),
      t.textPosition = r,
      t.textOffset = e.getShallow("offset");
      var a = e.getShallow("rotate");
      null != a && (a *= Math.PI / 180),
      t.textRotation = a,
      t.textDistance = D(e.getShallow("distance"), i ? null: 5)
    }
    var o, s = e.ecModel,
    l = s && s.option.textStyle,
    u = qa(e);
    if (u) {
      o = {};
      for (var h in u) if (u.hasOwnProperty(h)) {
        var c = e.getModel(["rich", h]);
        Ua(o[h] = {},
        c, l, n, i)
      }
    }
    return t.rich = o,
    Ua(t, e, l, n, i, !0),
    n.forceRich && !n.textStyle && (n.textStyle = {}),
    t
  }
  function qa(t) {
    for (var e; t && t !== t.ecModel;) {
      var n = (t.option || tv).rich;
      if (n) {
        e = e || {};
        for (var i in n) n.hasOwnProperty(i) && (e[i] = 1)
      }
      t = t.parentModel
    }
    return e
  }
  function Ua(t, e, n, i, r, a) {
    n = !r && n || tv,
    t.textFill = Ya(e.getShallow("color"), i) || n.color,
    t.textStroke = Ya(e.getShallow("textBorderColor"), i) || n.textBorderColor,
    t.textStrokeWidth = D(e.getShallow("textBorderWidth"), n.textBorderWidth),
    r || (a && (t.insideRollbackOpt = i, ja(t)), null == t.textFill && (t.textFill = i.autoColor)),
    t.fontStyle = e.getShallow("fontStyle") || n.fontStyle,
    t.fontWeight = e.getShallow("fontWeight") || n.fontWeight,
    t.fontSize = e.getShallow("fontSize") || n.fontSize,
    t.fontFamily = e.getShallow("fontFamily") || n.fontFamily,
    t.textAlign = e.getShallow("align"),
    t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"),
    t.textLineHeight = e.getShallow("lineHeight"),
    t.textWidth = e.getShallow("width"),
    t.textHeight = e.getShallow("height"),
    t.textTag = e.getShallow("tag"),
    a && i.disableBox || (t.textBackgroundColor = Ya(e.getShallow("backgroundColor"), i), t.textPadding = e.getShallow("padding"), t.textBorderColor = Ya(e.getShallow("borderColor"), i), t.textBorderWidth = e.getShallow("borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), t.textBoxShadowColor = e.getShallow("shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), t.textBoxShadowOffsetX = e.getShallow("shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")),
    t.textShadowColor = e.getShallow("textShadowColor") || n.textShadowColor,
    t.textShadowBlur = e.getShallow("textShadowBlur") || n.textShadowBlur,
    t.textShadowOffsetX = e.getShallow("textShadowOffsetX") || n.textShadowOffsetX,
    t.textShadowOffsetY = e.getShallow("textShadowOffsetY") || n.textShadowOffsetY
  }
  function Ya(t, e) {
    return "auto" !== t ? t: e && e.autoColor ? e.autoColor: null
  }
  function ja(t) {
    var e, n = t.textPosition,
    i = t.insideRollbackOpt;
    if (i && null == t.textFill) {
      var r = i.autoColor,
      a = i.isRectText,
      o = i.useInsideStyle,
      s = o !== !1 && (o === !0 || a && n && "string" == typeof n && n.indexOf("inside") >= 0),
      l = !s && null != r; (s || l) && (e = {
        textFill: t.textFill,
        textStroke: t.textStroke,
        textStrokeWidth: t.textStrokeWidth
      }),
      s && (t.textFill = "#fff", null == t.textStroke && (t.textStroke = r, null == t.textStrokeWidth && (t.textStrokeWidth = 2))),
      l && (t.textFill = r)
    }
    t.insideRollback = e
  }
  function Za(t) {
    var e = t.insideRollback;
    e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, t.insideRollback = null)
  }
  function $a(t, e) {
    var n = e && e.getModel("textStyle");
    return E([t.fontStyle || n && n.getShallow("fontStyle") || "", t.fontWeight || n && n.getShallow("fontWeight") || "", (t.fontSize || n && n.getShallow("fontSize") || 12) + "px", t.fontFamily || n && n.getShallow("fontFamily") || "sans-serif"].join(" "))
  }
  function Qa(t, e, n, i, r, a) {
    "function" == typeof r && (a = r, r = null);
    var o = i && i.isAnimationEnabled();
    if (o) {
      var s = t ? "Update": "",
      l = i.getShallow("animationDuration" + s),
      u = i.getShallow("animationEasing" + s),
      h = i.getShallow("animationDelay" + s);
      "function" == typeof h && (h = h(r, i.getAnimationDelayParams ? i.getAnimationDelayParams(e, r) : null)),
      "function" == typeof l && (l = l(r)),
      l > 0 ? e.animateTo(n, l, h || 0, u, a, !!a) : (e.stopAnimation(), e.attr(n), a && a())
    } else e.stopAnimation(),
    e.attr(n),
    a && a()
  }
  function Ka(t, e, n, i, r) {
    Qa(!0, t, e, n, i, r)
  }
  function Ja(t, e, n, i, r) {
    Qa(!1, t, e, n, i, r)
  }
  function to(t, e) {
    for (var n = Pe([]); t && t !== e;) Ee(n, t.getLocalTransform(), n),
    t = t.parent;
    return n
  }
  function eo(t, e, n) {
    return e && !f(e) && (e = Nf.getLocalTransform(e)),
    n && (e = Fe([], e)),
    ae([], t, e)
  }
  function no(t, e, n) {
    var i = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]),
    r = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]),
    a = ["left" === t ? -i: "right" === t ? i: 0, "top" === t ? -r: "bottom" === t ? r: 0];
    return a = eo(a, e, n),
    Math.abs(a[0]) > Math.abs(a[1]) ? a[0] > 0 ? "right": "left": a[1] > 0 ? "bottom": "top"
  }
  function io(t, e, n) {
    function i(t) {
      var e = {};
      return t.traverse(function(t) { ! t.isGroup && t.anid && (e[t.anid] = t)
      }),
      e
    }
    function r(t) {
      var e = {
        position: G(t.position),
        rotation: t.rotation
      };
      return t.shape && (e.shape = o({},
      t.shape)),
      e
    }
    if (t && e) {
      var a = i(t);
      e.traverse(function(t) {
        if (!t.isGroup && t.anid) {
          var e = a[t.anid];
          if (e) {
            var i = r(t);
            t.attr(r(e)),
            Ka(t, i, n, t.dataIndex)
          }
        }
      })
    }
  }
  function ro(t, e) {
    return p(t,
    function(t) {
      var n = t[0];
      n = Kg(n, e.x),
      n = Jg(n, e.x + e.width);
      var i = t[1];
      return i = Kg(i, e.y),
      i = Jg(i, e.y + e.height),
      [n, i]
    })
  }
  function ao(t, e) {
    var n = Kg(t.x, e.x),
    i = Jg(t.x + t.width, e.x + e.width),
    r = Kg(t.y, e.y),
    a = Jg(t.y + t.height, e.y + e.height);
    return i >= n && a >= r ? {
      x: n,
      y: r,
      width: i - n,
      height: a - r
    }: void 0
  }
  function oo(t, e, n) {
    e = o({
      rectHover: !0
    },
    e);
    var i = e.style = {
      strokeNoScale: !0
    };
    return n = n || {
      x: -1,
      y: -1,
      width: 2,
      height: 2
    },
    t ? 0 === t.indexOf("image://") ? (i.image = t.slice(8), s(i, n), new Ci(e)) : ma(t.replace("path://", ""), e, n, "center") : void 0
  }
  function so(t, e, n, i, r) {
    for (var a = 0,
    o = r[r.length - 1]; a < r.length; a++) {
      var s = r[a];
      if (lo(t, e, n, i, s[0], s[1], o[0], o[1])) return ! 0;
      o = s
    }
  }
  function lo(t, e, n, i, r, a, o, s) {
    var l = n - t,
    u = i - e,
    h = o - r,
    c = s - a,
    f = uo(h, c, l, u);
    if (ho(f)) return ! 1;
    var d = t - r,
    p = e - a,
    g = uo(d, p, l, u) / f;
    if (0 > g || g > 1) return ! 1;
    var v = uo(d, p, h, c) / f;
    return 0 > v || v > 1 ? !1 : !0
  }
  function uo(t, e, n, i) {
    return t * i - n * e
  }
  function ho(t) {
    return 1e-6 >= t && t >= -1e-6
  }
  function co(t, e, n) {
    this.parentModel = e,
    this.ecModel = n,
    this.option = t
  }
  function fo(t, e, n) {
    for (var i = 0; i < e.length && (!e[i] || (t = t && "object" == typeof t ? t[e[i]] : null, null != t)); i++);
    return null == t && n && (t = n.get(e)),
    t
  }
  function po(t, e) {
    var n = yv(t).getParent;
    return n ? n.call(t, e) : t.parentModel
  }
  function go(t) {
    return [t || "", _v++, Math.random().toFixed(5)].join("_")
  }
  function vo(t) {
    var e = {};
    return t.registerSubTypeDefaulter = function(t, n) {
      t = dr(t),
      e[t.main] = n
    },
    t.determineSubType = function(n, i) {
      var r = i.type;
      if (!r) {
        var a = dr(n).main;
        t.hasSubTypes(n) && e[a] && (r = e[a](i))
      }
      return r
    },
    t
  }
  function mo(t, e) {
    function n(t) {
      var n = {},
      a = [];
      return d(t,
      function(o) {
        var s = i(n, o),
        l = s.originalDeps = e(o),
        h = r(l, t);
        s.entryCount = h.length,
        0 === s.entryCount && a.push(o),
        d(h,
        function(t) {
          u(s.predecessor, t) < 0 && s.predecessor.push(t);
          var e = i(n, t);
          u(e.successor, t) < 0 && e.successor.push(o)
        })
      }),
      {
        graph: n,
        noEntryList: a
      }
    }
    function i(t, e) {
      return t[e] || (t[e] = {
        predecessor: [],
        successor: []
      }),
      t[e]
    }
    function r(t, e) {
      var n = [];
      return d(t,
      function(t) {
        u(e, t) >= 0 && n.push(t)
      }),
      n
    }
    t.topologicalTravel = function(t, e, i, r) {
      function a(t) {
        l[t].entryCount--,
        0 === l[t].entryCount && u.push(t)
      }
      function o(t) {
        h[t] = !0,
        a(t)
      }
      if (t.length) {
        var s = n(e),
        l = s.graph,
        u = s.noEntryList,
        h = {};
        for (d(t,
        function(t) {
          h[t] = !0
        }); u.length;) {
          var c = u.pop(),
          f = l[c],
          p = !!h[c];
          p && (i.call(r, c, f.originalDeps.slice()), delete h[c]),
          d(f.successor, p ? o: a)
        }
        d(h,
        function() {
          throw new Error("Circle dependency may exists")
        })
      }
    }
  }
  function yo(t) {
    return t.replace(/^\s+|\s+$/g, "")
  }
  function _o(t, e, n, i) {
    var r = e[1] - e[0],
    a = n[1] - n[0];
    if (0 === r) return 0 === a ? n[0] : (n[0] + n[1]) / 2;
    if (i) if (r > 0) {
      if (t <= e[0]) return n[0];
      if (t >= e[1]) return n[1]
    } else {
      if (t >= e[0]) return n[0];
      if (t <= e[1]) return n[1]
    } else {
      if (t === e[0]) return n[0];
      if (t === e[1]) return n[1]
    }
    return (t - e[0]) / r * a + n[0]
  }
  function xo(t, e) {
    switch (t) {
    case "center":
    case "middle":
      t = "50%";
      break;
    case "left":
    case "top":
      t = "0%";
      break;
    case "right":
    case "bottom":
      t = "100%"
    }
    return "string" == typeof t ? yo(t).match(/%$/) ? parseFloat(t) / 100 * e: parseFloat(t) : null == t ? 0 / 0 : +t
  }
  function wo(t, e, n) {
    return null == e && (e = 10),
    e = Math.min(Math.max(0, e), 20),
    t = ( + t).toFixed(e),
    n ? t: +t
  }
  function bo(t) {
    return t.sort(function(t, e) {
      return t - e
    }),
    t
  }
  function Mo(t) {
    if (t = +t, isNaN(t)) return 0;
    for (var e = 1,
    n = 0; Math.round(t * e) / e !== t;) e *= 10,
    n++;
    return n
  }
  function So(t) {
    var e = t.toString(),
    n = e.indexOf("e");
    if (n > 0) {
      var i = +e.slice(n + 1);
      return 0 > i ? -i: 0
    }
    var r = e.indexOf(".");
    return 0 > r ? 0 : e.length - 1 - r
  }
  function To(t, e) {
    var n = Math.log,
    i = Math.LN10,
    r = Math.floor(n(t[1] - t[0]) / i),
    a = Math.round(n(Math.abs(e[1] - e[0])) / i),
    o = Math.min(Math.max( - r + a, 0), 20);
    return isFinite(o) ? o: 20
  }
  function Co(t, e, n) {
    if (!t[e]) return 0;
    var i = g(t,
    function(t, e) {
      return t + (isNaN(e) ? 0 : e)
    },
    0);
    if (0 === i) return 0;
    for (var r = Math.pow(10, n), a = p(t,
    function(t) {
      return (isNaN(t) ? 0 : t) / i * r * 100
    }), o = 100 * r, s = p(a,
    function(t) {
      return Math.floor(t)
    }), l = g(s,
    function(t, e) {
      return t + e
    },
    0), u = p(a,
    function(t, e) {
      return t - s[e]
    }); o > l;) {
      for (var h = Number.NEGATIVE_INFINITY,
      c = null,
      f = 0,
      d = u.length; d > f; ++f) u[f] > h && (h = u[f], c = f); ++s[c],
      u[c] = 0,
      ++l
    }
    return s[e] / r
  }
  function ko(t) {
    var e = 2 * Math.PI;
    return (t % e + e) % e
  }
  function Io(t) {
    return t > -xv && xv > t
  }
  function Do(t) {
    if (t instanceof Date) return t;
    if ("string" == typeof t) {
      var e = bv.exec(t);
      if (!e) return new Date(0 / 0);
      if (e[8]) {
        var n = +e[4] || 0;
        return "Z" !== e[8].toUpperCase() && (n -= e[8].slice(0, 3)),
        new Date(Date.UTC( + e[1], +(e[2] || 1) - 1, +e[3] || 1, n, +(e[5] || 0), +e[6] || 0, +e[7] || 0))
      }
      return new Date( + e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0), +e[6] || 0, +e[7] || 0)
    }
    return new Date(null == t ? 0 / 0 : Math.round(t))
  }
  function Ao(t) {
    return Math.pow(10, Lo(t))
  }
  function Lo(t) {
    if (0 === t) return 0;
    var e = Math.floor(Math.log(t) / Math.LN10);
    return t / Math.pow(10, e) >= 10 && e++,
    e
  }
  function Po(t, e) {
    var n, i = Lo(t),
    r = Math.pow(10, i),
    a = t / r;
    return n = e ? 1.5 > a ? 1 : 2.5 > a ? 2 : 4 > a ? 3 : 7 > a ? 5 : 10 : 1 > a ? 1 : 2 > a ? 2 : 3 > a ? 3 : 5 > a ? 5 : 10,
    t = n * r,
    i >= -20 ? +t.toFixed(0 > i ? -i: 0) : t
  }
  function Oo(t, e) {
    var n = (t.length - 1) * e + 1,
    i = Math.floor(n),
    r = +t[i - 1],
    a = n - i;
    return a ? r + a * (t[i] - r) : r
  }
  function Eo(t) {
    function e(t, n, i) {
      return t.interval[i] < n.interval[i] || t.interval[i] === n.interval[i] && (t.close[i] - n.close[i] === (i ? -1 : 1) || !i && e(t, n, 1))
    }
    t.sort(function(t, n) {
      return e(t, n, 0) ? -1 : 1
    });
    for (var n = -1 / 0,
    i = 1,
    r = 0; r < t.length;) {
      for (var a = t[r].interval, o = t[r].close, s = 0; 2 > s; s++) a[s] <= n && (a[s] = n, o[s] = s ? 1 : 1 - i),
      n = a[s],
      i = o[s];
      a[0] === a[1] && o[0] * o[1] !== 1 ? t.splice(r, 1) : r++
    }
    return t
  }
  function Bo(t) {
    return t - parseFloat(t) >= 0
  }
  function Ro(t) {
    return isNaN(t) ? "-": (t = (t + "").split("."), t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (t.length > 1 ? "." + t[1] : ""))
  }
  function zo(t, e) {
    return t = (t || "").toLowerCase().replace(/-(.)/g,
    function(t, e) {
      return e.toUpperCase()
    }),
    e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)),
    t
  }
  function Fo(t) {
    return null == t ? "": (t + "").replace(Tv,
    function(t, e) {
      return Cv[e]
    })
  }
  function No(t, e, n) {
    x(e) || (e = [e]);
    var i = e.length;
    if (!i) return "";
    for (var r = e[0].$vars || [], a = 0; a < r.length; a++) {
      var o = kv[a];
      t = t.replace(Iv(o), Iv(o, 0))
    }
    for (var s = 0; i > s; s++) for (var l = 0; l < r.length; l++) {
      var u = e[s][r[l]];
      t = t.replace(Iv(kv[l], s), n ? Fo(u) : u)
    }
    return t
  }
  function Ho(t, e, n) {
    return d(e,
    function(e, i) {
      t = t.replace("{" + i + "}", n ? Fo(e) : e)
    }),
    t
  }
  function Vo(t, e) {
    t = b(t) ? {
      color: t,
      extraCssText: e
    }: t || {};
    var n = t.color,
    i = t.type,
    e = t.extraCssText,
    r = t.renderMode || "html",
    a = t.markerId || "X";
    return n ? "html" === r ? "subItem" === i ? '<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;border-radius:4px;width:4px;height:4px;background-color:' + Fo(n) + ";" + (e || "") + '"></span>': '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:' + Fo(n) + ";" + (e || "") + '"></span>': {
      renderMode: r,
      content: "{marker" + a + "|}  ",
      style: {
        color: n
      }
    }: ""
  }
  function Wo(t, e) {
    return t += "",
    "0000".substr(0, e - t.length) + t
  }
  function Go(t, e, n) { ("week" === t || "month" === t || "quarter" === t || "half-year" === t || "year" === t) && (t = "MM-dd\nyyyy");
    var i = Do(e),
    r = n ? "UTC": "",
    a = i["get" + r + "FullYear"](),
    o = i["get" + r + "Month"]() + 1,
    s = i["get" + r + "Date"](),
    l = i["get" + r + "Hours"](),
    u = i["get" + r + "Minutes"](),
    h = i["get" + r + "Seconds"](),
    c = i["get" + r + "Milliseconds"]();
    return t = t.replace("MM", Wo(o, 2)).replace("M", o).replace("yyyy", a).replace("yy", a % 100).replace("dd", Wo(s, 2)).replace("d", s).replace("hh", Wo(l, 2)).replace("h", l).replace("mm", Wo(u, 2)).replace("m", u).replace("ss", Wo(h, 2)).replace("s", h).replace("SSS", Wo(c, 3))
  }
  function Xo(t) {
    return t ? t.charAt(0).toUpperCase() + t.substr(1) : t
  }
  function qo(t) {
    return Xn(t.text, t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich, t.truncate)
  }
  function Uo(t, e, n, i, r, a, o, s) {
    return Xn(t, e, n, i, r, s, a, o)
  }
  function Yo(t, e) {
    if ("_blank" === e || "blank" === e) {
      var n = window.open();
      n.opener = null,
      n.location = t
    } else window.open(t, e)
  }
  function jo(t, e, n, i, r) {
    var a = 0,
    o = 0;
    null == i && (i = 1 / 0),
    null == r && (r = 1 / 0);
    var s = 0;
    e.eachChild(function(l, u) {
      var h, c, f = l.position,
      d = l.getBoundingRect(),
      p = e.childAt(u + 1),
      g = p && p.getBoundingRect();
      if ("horizontal" === t) {
        var v = d.width + (g ? -g.x + d.x: 0);
        h = a + v,
        h > i || l.newline ? (a = 0, h = v, o += s + n, s = d.height) : s = Math.max(s, d.height)
      } else {
        var m = d.height + (g ? -g.y + d.y: 0);
        c = o + m,
        c > r || l.newline ? (a += s + n, o = 0, c = m, s = d.width) : s = Math.max(s, d.width)
      }
      l.newline || (f[0] = a, f[1] = o, "horizontal" === t ? a = h + n: o = c + n)
    })
  }
  function Zo(t, e, n) {
    n = Sv(n || 0);
    var i = e.width,
    r = e.height,
    a = xo(t.left, i),
    o = xo(t.top, r),
    s = xo(t.right, i),
    l = xo(t.bottom, r),
    u = xo(t.width, i),
    h = xo(t.height, r),
    c = n[2] + n[0],
    f = n[1] + n[3],
    d = t.aspect;
    switch (isNaN(u) && (u = i - s - f - a), isNaN(h) && (h = r - l - c - o), null != d && (isNaN(u) && isNaN(h) && (d > i / r ? u = .8 * i: h = .8 * r), isNaN(u) && (u = d * h), isNaN(h) && (h = u / d)), isNaN(a) && (a = i - s - u - f), isNaN(o) && (o = r - l - h - c), t.left || t.right) {
    case "center":
      a = i / 2 - u / 2 - n[3];
      break;
    case "right":
      a = i - u - f
    }
    switch (t.top || t.bottom) {
    case "middle":
    case "center":
      o = r / 2 - h / 2 - n[0];
      break;
    case "bottom":
      o = r - h - c
    }
    a = a || 0,
    o = o || 0,
    isNaN(u) && (u = i - f - a - (s || 0)),
    isNaN(h) && (h = r - c - o - (l || 0));
    var p = new Tn(a + n[3], o + n[0], u, h);
    return p.margin = n,
    p
  }
  function $o(t, e, n) {
    function i(n, i) {
      var o = {},
      l = 0,
      u = {},
      h = 0,
      c = 2;
      if (Lv(n,
      function(e) {
        u[e] = t[e]
      }), Lv(n,
      function(t) {
        r(e, t) && (o[t] = u[t] = e[t]),
        a(o, t) && l++,
        a(u, t) && h++
      }), s[i]) return a(e, n[1]) ? u[n[2]] = null: a(e, n[2]) && (u[n[1]] = null),
      u;
      if (h !== c && l) {
        if (l >= c) return o;
        for (var f = 0; f < n.length; f++) {
          var d = n[f];
          if (!r(o, d) && r(t, d)) {
            o[d] = t[d];
            break
          }
        }
        return o
      }
      return u
    }
    function r(t, e) {
      return t.hasOwnProperty(e)
    }
    function a(t, e) {
      return null != t[e] && "auto" !== t[e]
    }
    function o(t, e, n) {
      Lv(t,
      function(t) {
        e[t] = n[t]
      })
    } ! M(n) && (n = {});
    var s = n.ignoreSize; ! x(s) && (s = [s, s]);
    var l = i(Ov[0], 0),
    u = i(Ov[1], 1);
    o(Ov[0], t, l),
    o(Ov[1], t, u)
  }
  function Qo(t) {
    return Ko({},
    t)
  }
  function Ko(t, e) {
    return e && t && Lv(Pv,
    function(n) {
      e.hasOwnProperty(n) && (t[n] = e[n])
    }),
    t
  }
  function Jo(t) {
    var e = [];
    return d(Rv.getClassesByMainType(t),
    function(t) {
      e = e.concat(t.prototype.dependencies || [])
    }),
    e = p(e,
    function(t) {
      return dr(t).main
    }),
    "dataset" !== t && u(e, "dataset") <= 0 && e.unshift("dataset"),
    e
  }
  function ts(t, e) {
    for (var n = t.length,
    i = 0; n > i; i++) if (t[i].length > e) return t[i];
    return t[n - 1]
  }
  function es(t) {
    this.fromDataset = t.fromDataset,
    this.data = t.data || (t.sourceFormat === Xv ? {}: []),
    this.sourceFormat = t.sourceFormat || qv,
    this.seriesLayoutBy = t.seriesLayoutBy || Yv,
    this.dimensionsDefine = t.dimensionsDefine,
    this.encodeDefine = t.encodeDefine && F(t.encodeDefine),
    this.startIndex = t.startIndex || 0,
    this.dimensionsDetectCount = t.dimensionsDetectCount
  }
  function ns(t) {
    var e = t.option.source,
    n = qv;
    if (T(e)) n = Uv;
    else if (x(e)) {
      0 === e.length && (n = Wv);
      for (var i = 0,
      r = e.length; r > i; i++) {
        var a = e[i];
        if (null != a) {
          if (x(a)) {
            n = Wv;
            break
          }
          if (M(a)) {
            n = Gv;
            break
          }
        }
      }
    } else if (M(e)) {
      for (var o in e) if (e.hasOwnProperty(o) && f(e[o])) {
        n = Xv;
        break
      }
    } else if (null != e) throw new Error("Invalid data");
    $v(t).sourceFormat = n
  }
  function is(t) {
    return $v(t).source
  }
  function rs(t) {
    $v(t).datasetMap = F()
  }
  function as(t) {
    var e = t.option,
    n = e.data,
    i = T(n) ? Uv: Vv,
    r = !1,
    a = e.seriesLayoutBy,
    o = e.sourceHeader,
    s = e.dimensions,
    l = fs(t);
    if (l) {
      var u = l.option;
      n = u.source,
      i = $v(l).sourceFormat,
      r = !0,
      a = a || u.seriesLayoutBy,
      null == o && (o = u.sourceHeader),
      s = s || u.dimensions
    }
    var h = os(n, i, a, o, s);
    $v(t).source = new es({
      data: n,
      fromDataset: r,
      seriesLayoutBy: a,
      sourceFormat: i,
      dimensionsDefine: h.dimensionsDefine,
      startIndex: h.startIndex,
      dimensionsDetectCount: h.dimensionsDetectCount,
      encodeDefine: e.encode
    })
  }
  function os(t, e, n, i, r) {
    if (!t) return {
      dimensionsDefine: ss(r)
    };
    var a, o;
    if (e === Wv)"auto" === i || null == i ? ls(function(t) {
      null != t && "-" !== t && (b(t) ? null == o && (o = 1) : o = 0)
    },
    n, t, 10) : o = i ? 1 : 0,
    r || 1 !== o || (r = [], ls(function(t, e) {
      r[e] = null != t ? t: ""
    },
    n, t)),
    a = r ? r.length: n === jv ? t.length: t[0] ? t[0].length: null;
    else if (e === Gv) r || (r = us(t));
    else if (e === Xv) r || (r = [], d(t,
    function(t, e) {
      r.push(e)
    }));
    else if (e === Vv) {
      var s = tr(t[0]);
      a = x(s) && s.length || 1
    }
    return {
      startIndex: o,
      dimensionsDefine: ss(r),
      dimensionsDetectCount: a
    }
  }
  function ss(t) {
    if (t) {
      var e = F();
      return p(t,
      function(t) {
        if (t = o({},
        M(t) ? t: {
          name: t
        }), null == t.name) return t;
        t.name += "",
        null == t.displayName && (t.displayName = t.name);
        var n = e.get(t.name);
        return n ? t.name += "-" + n.count++:e.set(t.name, {
          count: 1
        }),
        t
      })
    }
  }
  function ls(t, e, n, i) {
    if (null == i && (i = 1 / 0), e === jv) for (var r = 0; r < n.length && i > r; r++) t(n[r] ? n[r][0] : null, r);
    else for (var a = n[0] || [], r = 0; r < a.length && i > r; r++) t(a[r], r)
  }
  function us(t) {
    for (var e, n = 0; n < t.length && !(e = t[n++]););
    if (e) {
      var i = [];
      return d(e,
      function(t, e) {
        i.push(e)
      }),
      i
    }
  }
  function hs(t, e, n) {
    function i(t, e, n) {
      for (var i = 0; n > i; i++) t.push(e + i)
    }
    function r(t) {
      var e = t.dimsDef;
      return e ? e.length: 1
    }
    var a = {},
    o = fs(e);
    if (!o || !t) return a;
    var s, l, u = [],
    h = [],
    c = e.ecModel,
    f = $v(c).datasetMap,
    p = o.uid + "_" + n.seriesLayoutBy;
    t = t.slice(),
    d(t,
    function(e, n) { ! M(e) && (t[n] = {
        name: e
      }),
      "ordinal" === e.type && null == s && (s = n, l = r(t[n])),
      a[e.name] = []
    });
    var g = f.get(p) || f.set(p, {
      categoryWayDim: l,
      valueWayDim: 0
    });
    return d(t,
    function(t, e) {
      var n = t.name,
      o = r(t);
      if (null == s) {
        var l = g.valueWayDim;
        i(a[n], l, o),
        i(h, l, o),
        g.valueWayDim += o
      } else if (s === e) i(a[n], 0, o),
      i(u, 0, o);
      else {
        var l = g.categoryWayDim;
        i(a[n], l, o),
        i(h, l, o),
        g.categoryWayDim += o
      }
    }),
    u.length && (a.itemName = u),
    h.length && (a.seriesName = h),
    a
  }
  function cs(t, e, n) {
    var i = {},
    r = fs(t);
    if (!r) return i;
    var a, o = e.sourceFormat,
    s = e.dimensionsDefine; (o === Gv || o === Xv) && d(s,
    function(t, e) {
      "name" === (M(t) ? t.name: t) && (a = e)
    });
    var l = function() {
      function t(t) {
        return null != t.v && null != t.n
      }
      for (var i = {},
      r = {},
      l = [], u = 0, h = Math.min(5, n); h > u; u++) {
        var c = ps(e.data, o, e.seriesLayoutBy, s, e.startIndex, u);
        l.push(c);
        var f = c === Zv.Not;
        if (f && null == i.v && u !== a && (i.v = u), (null == i.n || i.n === i.v || !f && l[i.n] === Zv.Not) && (i.n = u), t(i) && l[i.n] !== Zv.Not) return i;
        f || (c === Zv.Might && null == r.v && u !== a && (r.v = u), (null == r.n || r.n === r.v) && (r.n = u))
      }
      return t(i) ? i: t(r) ? r: null
    } ();
    if (l) {
      i.value = l.v;
      var u = null != a ? a: l.n;
      i.itemName = [u],
      i.seriesName = [u]
    }
    return i
  }
  function fs(t) {
    var e = t.option,
    n = e.data;
    return n ? void 0 : t.ecModel.getComponent("dataset", e.datasetIndex || 0)
  }
  function ds(t, e) {
    return ps(t.data, t.sourceFormat, t.seriesLayoutBy, t.dimensionsDefine, t.startIndex, e)
  }
  function ps(t, e, n, i, r, a) {
    function o(t) {
      var e = b(t);
      return null != t && isFinite(t) && "" !== t ? e ? Zv.Might: Zv.Not: e && "-" !== t ? Zv.Must: void 0
    }
    var s, l = 5;
    if (T(t)) return Zv.Not;
    var u, h;
    if (i) {
      var c = i[a];
      M(c) ? (u = c.name, h = c.type) : b(c) && (u = c)
    }
    if (null != h) return "ordinal" === h ? Zv.Must: Zv.Not;
    if (e === Wv) if (n === jv) {
      for (var f = t[a], d = 0; d < (f || []).length && l > d; d++) if (null != (s = o(f[r + d]))) return s
    } else for (var d = 0; d < t.length && l > d; d++) {
      var p = t[r + d];
      if (p && null != (s = o(p[a]))) return s
    } else if (e === Gv) {
      if (!u) return Zv.Not;
      for (var d = 0; d < t.length && l > d; d++) {
        var g = t[d];
        if (g && null != (s = o(g[u]))) return s
      }
    } else if (e === Xv) {
      if (!u) return Zv.Not;
      var f = t[u];
      if (!f || T(f)) return Zv.Not;
      for (var d = 0; d < f.length && l > d; d++) if (null != (s = o(f[d]))) return s
    } else if (e === Vv) for (var d = 0; d < t.length && l > d; d++) {
      var g = t[d],
      v = tr(g);
      if (!x(v)) return Zv.Not;
      if (null != (s = o(v[a]))) return s
    }
    return Zv.Not
  }
  function gs(t, e) {
    if (e) {
      var n = e.seiresIndex,
      i = e.seriesId,
      r = e.seriesName;
      return null != n && t.componentIndex !== n || null != i && t.id !== i || null != r && t.name !== r
    }
  }
  function vs(t, e) {
    var n = t.color && !t.colorLayer;
    d(e,
    function(e, a) {
      "colorLayer" === a && n || Rv.hasClass(a) || ("object" == typeof e ? t[a] = t[a] ? r(t[a], e, !1) : i(e) : null == t[a] && (t[a] = e))
    })
  }
  function ms(t) {
    t = t,
    this.option = {},
    this.option[Qv] = 1,
    this._componentsMap = F({
      series: []
    }),
    this._seriesIndices,
    this._seriesIndicesMap,
    vs(t, this._theme.option),
    r(t, Fv, !1),
    this.mergeOption(t)
  }
  function ys(t, e) {
    x(e) || (e = e ? [e] : []);
    var n = {};
    return d(e,
    function(e) {
      n[e] = (t.get(e) || []).slice()
    }),
    n
  }
  function _s(t, e, n) {
    var i = e.type ? e.type: n ? n.subType: Rv.determineSubType(t, e);
    return i
  }
  function xs(t, e) {
    t._seriesIndicesMap = F(t._seriesIndices = p(e,
    function(t) {
      return t.componentIndex
    }) || [])
  }
  function ws(t, e) {
    return e.hasOwnProperty("subType") ? v(t,
    function(t) {
      return t.subType === e.subType
    }) : t
  }
  function bs(t) {
    d(Jv,
    function(e) {
      this[e] = y(t[e], t)
    },
    this)
  }
  function Ms() {
    this._coordinateSystems = []
  }
  function Ss(t) {
    this._api = t,
    this._timelineOptions = [],
    this._mediaList = [],
    this._mediaDefault,
    this._currentMediaIndices = [],
    this._optionBackup,
    this._newBaseOption
  }
  function Ts(t, e, n) {
    var i, r, a = [],
    o = [],
    s = t.timeline;
    if (t.baseOption && (r = t.baseOption), (s || t.options) && (r = r || {},
    a = (t.options || []).slice()), t.media) {
      r = r || {};
      var l = t.media;
      em(l,
      function(t) {
        t && t.option && (t.query ? o.push(t) : i || (i = t))
      })
    }
    return r || (r = t),
    r.timeline || (r.timeline = s),
    em([r].concat(a).concat(p(o,
    function(t) {
      return t.option
    })),
    function(t) {
      em(e,
      function(e) {
        e(t, n)
      })
    }),
    {
      baseOption: r,
      timelineOptions: a,
      mediaDefault: i,
      mediaList: o
    }
  }
  function Cs(t, e, n) {
    var i = {
      width: e,
      height: n,
      aspectratio: e / n
    },
    r = !0;
    return d(t,
    function(t, e) {
      var n = e.match(am);
      if (n && n[1] && n[2]) {
        var a = n[1],
        o = n[2].toLowerCase();
        ks(i[o], t, a) || (r = !1)
      }
    }),
    r
  }
  function ks(t, e, n) {
    return "min" === n ? t >= e: "max" === n ? e >= t: t === e
  }
  function Is(t, e) {
    return t.join(",") === e.join(",")
  }
  function Ds(t, e) {
    e = e || {},
    em(e,
    function(e, n) {
      if (null != e) {
        var i = t[n];
        if (Rv.hasClass(n)) {
          e = Ki(e),
          i = Ki(i);
          var r = nr(i, e);
          t[n] = im(r,
          function(t) {
            return t.option && t.exist ? rm(t.exist, t.option, !0) : t.exist || t.option
          })
        } else t[n] = rm(i, e, !0)
      }
    })
  }
  function As(t) {
    var e = t && t.itemStyle;
    if (e) for (var n = 0,
    i = lm.length; i > n; n++) {
      var a = lm[n],
      o = e.normal,
      s = e.emphasis;
      o && o[a] && (t[a] = t[a] || {},
      t[a].normal ? r(t[a].normal, o[a]) : t[a].normal = o[a], o[a] = null),
      s && s[a] && (t[a] = t[a] || {},
      t[a].emphasis ? r(t[a].emphasis, s[a]) : t[a].emphasis = s[a], s[a] = null)
    }
  }
  function Ls(t, e, n) {
    if (t && t[e] && (t[e].normal || t[e].emphasis)) {
      var i = t[e].normal,
      r = t[e].emphasis;
      i && (n ? (t[e].normal = t[e].emphasis = null, s(t[e], i)) : t[e] = i),
      r && (t.emphasis = t.emphasis || {},
      t.emphasis[e] = r)
    }
  }
  function Ps(t) {
    Ls(t, "itemStyle"),
    Ls(t, "lineStyle"),
    Ls(t, "areaStyle"),
    Ls(t, "label"),
    Ls(t, "labelLine"),
    Ls(t, "upperLabel"),
    Ls(t, "edgeLabel")
  }
  function Os(t, e) {
    var n = sm(t) && t[e],
    i = sm(n) && n.textStyle;
    if (i) for (var r = 0,
    a = mp.length; a > r; r++) {
      var e = mp[r];
      i.hasOwnProperty(e) && (n[e] = i[e])
    }
  }
  function Es(t) {
    t && (Ps(t), Os(t, "label"), t.emphasis && Os(t.emphasis, "label"))
  }
  function Bs(t) {
    if (sm(t)) {
      As(t),
      Ps(t),
      Os(t, "label"),
      Os(t, "upperLabel"),
      Os(t, "edgeLabel"),
      t.emphasis && (Os(t.emphasis, "label"), Os(t.emphasis, "upperLabel"), Os(t.emphasis, "edgeLabel"));
      var e = t.markPoint;
      e && (As(e), Es(e));
      var n = t.markLine;
      n && (As(n), Es(n));
      var i = t.markArea;
      i && Es(i);
      var r = t.data;
      if ("graph" === t.type) {
        r = r || t.nodes;
        var a = t.links || t.edges;
        if (a && !T(a)) for (var o = 0; o < a.length; o++) Es(a[o]);
        d(t.categories,
        function(t) {
          Ps(t)
        })
      }
      if (r && !T(r)) for (var o = 0; o < r.length; o++) Es(r[o]);
      var e = t.markPoint;
      if (e && e.data) for (var s = e.data,
      o = 0; o < s.length; o++) Es(s[o]);
      var n = t.markLine;
      if (n && n.data) for (var l = n.data,
      o = 0; o < l.length; o++) x(l[o]) ? (Es(l[o][0]), Es(l[o][1])) : Es(l[o]);
      "gauge" === t.type ? (Os(t, "axisLabel"), Os(t, "title"), Os(t, "detail")) : "treemap" === t.type ? (Ls(t.breadcrumb, "itemStyle"), d(t.levels,
      function(t) {
        Ps(t)
      })) : "tree" === t.type && Ps(t.leaves)
    }
  }
  function Rs(t) {
    return x(t) ? t: t ? [t] : []
  }
  function zs(t) {
    return (x(t) ? t[0] : t) || {}
  }
  function Fs(t, e) {
    e = e.split(",");
    for (var n = t,
    i = 0; i < e.length && (n = n && n[e[i]], null != n); i++);
    return n
  }
  function Ns(t, e, n, i) {
    e = e.split(",");
    for (var r, a = t,
    o = 0; o < e.length - 1; o++) r = e[o],
    null == a[r] && (a[r] = {}),
    a = a[r]; (i || null == a[e[o]]) && (a[e[o]] = n)
  }
  function Hs(t) {
    d(hm,
    function(e) {
      e[0] in t && !(e[1] in t) && (t[e[1]] = t[e[0]])
    })
  }
  function Vs(t) {
    d(t,
    function(e, n) {
      var i = [],
      r = [0 / 0, 0 / 0],
      a = [e.stackResultDimension, e.stackedOverDimension],
      o = e.data,
      s = e.isStackedByIndex,
      l = o.map(a,
      function(a, l, u) {
        var h = o.get(e.stackedDimension, u);
        if (isNaN(h)) return r;
        var c, f;
        s ? f = o.getRawIndex(u) : c = o.get(e.stackedByDimension, u);
        for (var d = 0 / 0,
        p = n - 1; p >= 0; p--) {
          var g = t[p];
          if (s || (f = g.data.rawIndexOf(g.stackedByDimension, c)), f >= 0) {
            var v = g.data.getByRawIndex(g.stackResultDimension, f);
            if (h >= 0 && v > 0 || 0 >= h && 0 > v) {
              h += v,
              d = v;
              break
            }
          }
        }
        return i[0] = h,
        i[1] = d,
        i
      });
      o.hostModel.setData(l),
      e.data = l
    })
  }
  function Ws(t, e) {
    es.isInstance(t) || (t = es.seriesDataToSource(t)),
    this._source = t;
    var n = this._data = t.data,
    i = t.sourceFormat;
    i === Uv && (this._offset = 0, this._dimSize = e, this._data = n);
    var r = gm[i === Wv ? i + "_" + t.seriesLayoutBy: i];
    o(this, r)
  }
  function Gs() {
    return this._data.length
  }
  function Xs(t) {
    return this._data[t]
  }
  function qs(t) {
    for (var e = 0; e < t.length; e++) this._data.push(t[e])
  }
  function Us(t, e, n) {
    return null != n ? t[n] : t
  }
  function Ys(t, e, n, i) {
    return js(t[i], this._dimensionInfos[e])
  }
  function js(t, e) {
    var n = e && e.type;
    if ("ordinal" === n) {
      var i = e && e.ordinalMeta;
      return i ? i.parseAndCollect(t) : t
    }
    return "time" === n && "number" != typeof t && null != t && "-" !== t && (t = +Do(t)),
    null == t || "" === t ? 0 / 0 : +t
  }
  function Zs(t, e, n) {
    if (t) {
      var i = t.getRawDataItem(e);
      if (null != i) {
        var r, a, o = t.getProvider().getSource().sourceFormat,
        s = t.getDimensionInfo(n);
        return s && (r = s.name, a = s.index),
        vm[o](i, e, a, r)
      }
    }
  }
  function $s(t, e, n) {
    if (t) {
      var i = t.getProvider().getSource().sourceFormat;
      if (i === Vv || i === Gv) {
        var r = t.getRawDataItem(e);
        return i !== Vv || M(r) || (r = null),
        r ? r[n] : void 0
      }
    }
  }
  function Qs(t) {
    return new Ks(t)
  }
  function Ks(t) {
    t = t || {},
    this._reset = t.reset,
    this._plan = t.plan,
    this._count = t.count,
    this._onDirty = t.onDirty,
    this._dirty = !0,
    this.context
  }
  function Js(t, e, n, i, r, a) {
    wm.reset(n, i, r, a),
    t._callingProgress = e,
    t._callingProgress({
      start: n,
      end: i,
      count: i - n,
      next: wm.next
    },
    t.context)
  }
  function tl(t, e) {
    t._dueIndex = t._outputDueEnd = t._dueEnd = 0,
    t._settedOutputEnd = null;
    var n, i; ! e && t._reset && (n = t._reset(t.context), n && n.progress && (i = n.forceFirstProgress, n = n.progress), x(n) && !n.length && (n = null)),
    t._progress = n,
    t._modBy = t._modDataCount = null;
    var r = t._downstream;
    return r && r.dirty(),
    i
  }
  function el(t) {
    var e = t.name;
    rr(t) || (t.name = nl(t) || e)
  }
  function nl(t) {
    var e = t.getRawData(),
    n = e.mapDimension("seriesName", !0),
    i = [];
    return d(n,
    function(t) {
      var n = e.getDimensionInfo(t);
      n.displayName && i.push(n.displayName)
    }),
    i.join(" ")
  }
  function il(t) {
    return t.model.getRawData().count()
  }
  function rl(t) {
    var e = t.model;
    return e.setData(e.getRawData().cloneShallow()),
    al
  }
  function al(t, e) {
    e.outputData && t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData)
  }
  function ol(t, e) {
    d(t.CHANGABLE_METHODS,
    function(n) {
      t.wrapMethod(n, _(sl, e))
    })
  }
  function sl(t) {
    var e = ll(t);
    e && e.setOutputEnd(this.count())
  }
  function ll(t) {
    var e = (t.ecModel || {}).scheduler,
    n = e && e.getPipeline(t.uid);
    if (n) {
      var i = n.currentTask;
      if (i) {
        var r = i.agentStubMap;
        r && (i = r.get(t.uid))
      }
      return i
    }
  }
  function ul() {
    this.group = new pd,
    this.uid = go("viewChart"),
    this.renderTask = Qs({
      plan: fl,
      reset: dl
    }),
    this.renderTask.context = {
      view: this
    }
  }
  function hl(t, e, n) {
    if (t && (t.trigger(e, n), t.isGroup && !Fa(t))) for (var i = 0,
    r = t.childCount(); r > i; i++) hl(t.childAt(i), e, n)
  }
  function cl(t, e, n) {
    var i = or(t, e),
    r = e && null != e.highlightKey ? Na(e.highlightKey) : null;
    null != i ? d(Ki(i),
    function(e) {
      hl(t.getItemGraphicEl(e), n, r)
    }) : t.eachItemGraphicEl(function(t) {
      hl(t, n, r)
    })
  }
  function fl(t) {
    return Im(t.model)
  }
  function dl(t) {
    var e = t.model,
    n = t.ecModel,
    i = t.api,
    r = t.payload,
    a = e.pipelineContext.progressiveRender,
    o = t.view,
    s = r && km(r).updateMethod,
    l = a ? "incrementalPrepareRender": s && o[s] ? s: "render";
    return "render" !== l && o[l](e, n, i, r),
    Am[l]
  }
  function pl(t, e, n) {
    function i() {
      h = (new Date).getTime(),
      c = null,
      t.apply(o, s || [])
    }
    var r, a, o, s, l, u = 0,
    h = 0,
    c = null;
    e = e || 0;
    var f = function() {
      r = (new Date).getTime(),
      o = this,
      s = arguments;
      var t = l || e,
      f = l || n;
      l = null,
      a = r - (f ? u: h) - t,
      clearTimeout(c),
      f ? c = setTimeout(i, t) : a >= 0 ? i() : c = setTimeout(i, -a),
      u = r
    };
    return f.clear = function() {
      c && (clearTimeout(c), c = null)
    },
    f.debounceNextCall = function(t) {
      l = t
    },
    f
  }
  function gl(t, e, n, i) {
    this.ecInstance = t,
    this.api = e,
    this.unfinished;
    var n = this._dataProcessorHandlers = n.slice(),
    i = this._visualHandlers = i.slice();
    this._allHandlers = n.concat(i),
    this._stageTaskMap = F()
  }
  function vl(t, e, n, i, r) {
    function a(t, e) {
      return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id))
    }
    r = r || {};
    var o;
    d(e,
    function(e) {
      if (!r.visualType || r.visualType === e.visualType) {
        var s = t._stageTaskMap.get(e.uid),
        l = s.seriesTaskMap,
        u = s.overallTask;
        if (u) {
          var h, c = u.agentStubMap;
          c.each(function(t) {
            a(r, t) && (t.dirty(), h = !0)
          }),
          h && u.dirty(),
          zm(u, i);
          var f = t.getPerformArgs(u, r.block);
          c.each(function(t) {
            t.perform(f)
          }),
          o |= u.perform(f)
        } else l && l.each(function(s) {
          a(r, s) && s.dirty();
          var l = t.getPerformArgs(s, r.block);
          l.skip = !e.performRawSeries && n.isSeriesFiltered(s.context.model),
          zm(s, i),
          o |= s.perform(l)
        })
      }
    }),
    t.unfinished |= o
  }
  function ml(t, e, n, i, r) {
    function a(n) {
      var a = n.uid,
      s = o.get(a) || o.set(a, Qs({
        plan: Ml,
        reset: Sl,
        count: Cl
      }));
      s.context = {
        model: n,
        ecModel: i,
        api: r,
        useClearVisual: e.isVisual && !e.isLayout,
        plan: e.plan,
        reset: e.reset,
        scheduler: t
      },
      kl(t, n, s)
    }
    var o = n.seriesTaskMap || (n.seriesTaskMap = F()),
    s = e.seriesType,
    l = e.getTargetSeries;
    e.createOnAllSeries ? i.eachRawSeries(a) : s ? i.eachRawSeriesByType(s, a) : l && l(i, r).each(a);
    var u = t._pipelineMap;
    o.each(function(t, e) {
      u.get(e) || (t.dispose(), o.removeKey(e))
    })
  }
  function yl(t, e, n, i, r) {
    function a(e) {
      var n = e.uid,
      i = s.get(n);
      i || (i = s.set(n, Qs({
        reset: xl,
        onDirty: bl
      })), o.dirty()),
      i.context = {
        model: e,
        overallProgress: h,
        modifyOutputEnd: c
      },
      i.agent = o,
      i.__block = h,
      kl(t, e, i)
    }
    var o = n.overallTask = n.overallTask || Qs({
      reset: _l
    });
    o.context = {
      ecModel: i,
      api: r,
      overallReset: e.overallReset,
      scheduler: t
    };
    var s = o.agentStubMap = o.agentStubMap || F(),
    l = e.seriesType,
    u = e.getTargetSeries,
    h = !0,
    c = e.modifyOutputEnd;
    l ? i.eachRawSeriesByType(l, a) : u ? u(i, r).each(a) : (h = !1, d(i.getSeries(), a));
    var f = t._pipelineMap;
    s.each(function(t, e) {
      f.get(e) || (t.dispose(), o.dirty(), s.removeKey(e))
    })
  }
  function _l(t) {
    t.overallReset(t.ecModel, t.api, t.payload)
  }
  function xl(t) {
    return t.overallProgress && wl
  }
  function wl() {
    this.agent.dirty(),
    this.getDownstream().dirty()
  }
  function bl() {
    this.agent && this.agent.dirty()
  }
  function Ml(t) {
    return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload)
  }
  function Sl(t) {
    t.useClearVisual && t.data.clearAllVisual();
    var e = t.resetDefines = Ki(t.reset(t.model, t.ecModel, t.api, t.payload));
    return e.length > 1 ? p(e,
    function(t, e) {
      return Tl(e)
    }) : Fm
  }
  function Tl(t) {
    return function(e, n) {
      var i = n.data,
      r = n.resetDefines[t];
      if (r && r.dataEach) for (var a = e.start; a < e.end; a++) r.dataEach(i, a);
      else r && r.progress && r.progress(e, i)
    }
  }
  function Cl(t) {
    return t.data.count()
  }
  function kl(t, e, n) {
    var i = e.uid,
    r = t._pipelineMap.get(i); ! r.head && (r.head = n),
    r.tail && r.tail.pipe(n),
    r.tail = n,
    n.__idxInPipeline = r.count++,
    n.__pipeline = r
  }
  function Il(t) {
    Nm = null;
    try {
      t(Hm, Vm)
    } catch(e) {}
    return Nm
  }
  function Dl(t, e) {
    for (var n in e.prototype) t[n] = H
  }
  function Al(t) {
    if (b(t)) {
      var e = new DOMParser;
      t = e.parseFromString(t, "text/xml")
    }
    for (9 === t.nodeType && (t = t.firstChild);
    "svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType;) t = t.nextSibling;
    return t
  }
  function Ll() {
    this._defs = {},
    this._root = null,
    this._isDefine = !1,
    this._isText = !1
  }
  function Pl(t, e) {
    for (var n = t.firstChild; n;) {
      if (1 === n.nodeType) {
        var i = n.getAttribute("offset");
        i = i.indexOf("%") > 0 ? parseInt(i, 10) / 100 : i ? parseFloat(i) : 0;
        var r = n.getAttribute("stop-color") || "#000000";
        e.addColorStop(i, r)
      }
      n = n.nextSibling
    }
  }
  function Ol(t, e) {
    t && t.__inheritedStyle && (e.__inheritedStyle || (e.__inheritedStyle = {}), s(e.__inheritedStyle, t.__inheritedStyle))
  }
  function El(t) {
    for (var e = E(t).split(Zm), n = [], i = 0; i < e.length; i += 2) {
      var r = parseFloat(e[i]),
      a = parseFloat(e[i + 1]);
      n.push([r, a])
    }
    return n
  }
  function Bl(t, e, n, i) {
    var r = e.__inheritedStyle || {},
    a = "text" === e.type;
    if (1 === t.nodeType && (zl(t, e), o(r, Fl(t)), !i)) for (var s in Km) if (Km.hasOwnProperty(s)) {
      var l = t.getAttribute(s);
      null != l && (r[Km[s]] = l)
    }
    var u = a ? "textFill": "fill",
    h = a ? "textStroke": "stroke";
    e.style = e.style || new Md;
    var c = e.style;
    null != r.fill && c.set(u, Rl(r.fill, n)),
    null != r.stroke && c.set(h, Rl(r.stroke, n)),
    d(["lineWidth", "opacity", "fillOpacity", "strokeOpacity", "miterLimit", "fontSize"],
    function(t) {
      var e = "lineWidth" === t && a ? "textStrokeWidth": t;
      null != r[t] && c.set(e, parseFloat(r[t]))
    }),
    r.textBaseline && "auto" !== r.textBaseline || (r.textBaseline = "alphabetic"),
    "alphabetic" === r.textBaseline && (r.textBaseline = "bottom"),
    "start" === r.textAlign && (r.textAlign = "left"),
    "end" === r.textAlign && (r.textAlign = "right"),
    d(["lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign", "textBaseline"],
    function(t) {
      null != r[t] && c.set(t, r[t])
    }),
    r.lineDash && (e.style.lineDash = E(r.lineDash).split(Zm)),
    c[h] && "none" !== c[h] && (e[h] = !0),
    e.__inheritedStyle = r
  }
  function Rl(t, e) {
    var n = e && t && t.match(Jm);
    if (n) {
      var i = E(n[1]),
      r = e[i];
      return r
    }
    return t
  }
  function zl(t, e) {
    var n = t.getAttribute("transform");
    if (n) {
      n = n.replace(/,/g, " ");
      var i = null,
      r = [];
      n.replace(ty,
      function(t, e, n) {
        r.push(e, n)
      });
      for (var a = r.length - 1; a > 0; a -= 2) {
        var o = r[a],
        s = r[a - 1];
        switch (i = i || Le(), s) {
        case "translate":
          o = E(o).split(Zm),
          Be(i, i, [parseFloat(o[0]), parseFloat(o[1] || 0)]);
          break;
        case "scale":
          o = E(o).split(Zm),
          ze(i, i, [parseFloat(o[0]), parseFloat(o[1] || o[0])]);
          break;
        case "rotate":
          o = E(o).split(Zm),
          Re(i, i, parseFloat(o[0]));
          break;
        case "skew":
          o = E(o).split(Zm),
          console.warn("Skew transform is not supported yet");
          break;
        case "matrix":
          var o = E(o).split(Zm);
          i[0] = parseFloat(o[0]),
          i[1] = parseFloat(o[1]),
          i[2] = parseFloat(o[2]),
          i[3] = parseFloat(o[3]),
          i[4] = parseFloat(o[4]),
          i[5] = parseFloat(o[5])
        }
      }
      e.setLocalTransform(i)
    }
  }
  function Fl(t) {
    var e = t.getAttribute("style"),
    n = {};
    if (!e) return n;
    var i = {};
    ey.lastIndex = 0;
    for (var r; null != (r = ey.exec(e));) i[r[1]] = r[2];
    for (var a in Km) Km.hasOwnProperty(a) && null != i[a] && (n[Km[a]] = i[a]);
    return n
  }
  function Nl(t, e, n) {
    var i = e / t.width,
    r = n / t.height,
    a = Math.min(i, r),
    o = [a, a],
    s = [ - (t.x + t.width / 2) * a + e / 2, -(t.y + t.height / 2) * a + n / 2];
    return {
      scale: o,
      position: s
    }
  }
  function Hl(t, e) {
    return function(n, i, r) { (e || !this._disposed) && (n = n && n.toLowerCase(), Mf.prototype[t].call(this, n, i, r))
    }
  }
  function Vl() {
    Mf.call(this)
  }
  function Wl(t, e, n) {
    function r(t, e) {
      return t.__prio - e.__prio
    }
    n = n || {},
    "string" == typeof e && (e = zy[e]),
    this.id,
    this.group,
    this._dom = t;
    var a = "canvas",
    o = this._zr = Yi(t, {
      renderer: n.renderer || a,
      devicePixelRatio: n.devicePixelRatio,
      width: n.width,
      height: n.height
    });
    this._throttledZrFlush = pl(y(o.flush, o), 17);
    var e = i(e);
    e && fm(e, !0),
    this._theme = e,
    this._chartsViews = [],
    this._chartsMap = {},
    this._componentsViews = [],
    this._componentsMap = {},
    this._coordSysMgr = new Ms;
    var s = this._api = ou(this);
    On(Ry, r),
    On(Oy, r),
    this._scheduler = new gl(this, s, Oy, Ry),
    Mf.call(this, this._ecEventProcessor = new su),
    this._messageCenter = new Vl,
    this._initEvents(),
    this.resize = y(this.resize, this),
    this._pendingActions = [],
    o.animation.on("frame", this._onframe, this),
    $l(o, this),
    B(this)
  }
  function Gl(t, e, n) {
    if (!this._disposed) {
      var i, r = this._model,
      a = this._coordSysMgr.getCoordinateSystems();
      e = lr(r, e);
      for (var o = 0; o < a.length; o++) {
        var s = a[o];
        if (s[t] && null != (i = s[t](r, e, n))) return i
      }
    }
  }
  function Xl(t) {
    var e = t._model,
    n = t._scheduler;
    n.restorePipelines(e),
    n.prepareStageTasks(),
    Ql(t, "component", e, n),
    Ql(t, "chart", e, n),
    n.plan()
  }
  function ql(t, e, n, i, r) {
    function a(i) {
      i && i.__alive && i[e] && i[e](i.__model, o, t._api, n)
    }
    var o = t._model;
    if (!i) return void oy(t._componentsViews.concat(t._chartsViews), a);
    var s = {};
    s[i + "Id"] = n[i + "Id"],
    s[i + "Index"] = n[i + "Index"],
    s[i + "Name"] = n[i + "Name"];
    var l = {
      mainType: i,
      query: s
    };
    r && (l.subType = r);
    var u = n.excludeSeriesId;
    null != u && (u = F(Ki(u))),
    o && o.eachComponent(l,
    function(e) {
      u && null != u.get(e.id) || a(t["series" === i ? "_chartsMap": "_componentsMap"][e.__viewId])
    },
    t)
  }
  function Ul(t, e) {
    var n = t._chartsMap,
    i = t._scheduler;
    e.eachSeries(function(t) {
      i.updateStreamModes(t, n[t.__viewId])
    })
  }
  function Yl(t, e) {
    var n = t.type,
    i = t.escapeConnect,
    r = Ly[n],
    a = r.actionInfo,
    l = (a.update || "update").split(":"),
    u = l.pop();
    l = null != l[0] && uy(l[0]),
    this[Ty] = !0;
    var h = [t],
    c = !1;
    t.batch && (c = !0, h = p(t.batch,
    function(e) {
      return e = s(o({},
      e), t),
      e.batch = null,
      e
    }));
    var f, d = [],
    g = "highlight" === n || "downplay" === n;
    oy(h,
    function(t) {
      f = r.action(t, this._model, this._api),
      f = f || o({},
      t),
      f.type = a.event || f.type,
      d.push(f),
      g ? ql(this, u, t, "series") : l && ql(this, u, t, l.main, l.sub)
    },
    this),
    "none" === u || g || l || (this[Cy] ? (Xl(this), Dy.update.call(this, t), this[Cy] = !1) : Dy[u].call(this, t)),
    f = c ? {
      type: a.event || n,
      escapeConnect: i,
      batch: d
    }: d[0],
    this[Ty] = !1,
    !e && this._messageCenter.trigger(f.type, f)
  }
  function jl(t) {
    for (var e = this._pendingActions; e.length;) {
      var n = e.shift();
      Yl.call(this, n, t)
    }
  }
  function Zl(t) { ! t && this.trigger("updated")
  }
  function $l(t, e) {
    t.on("rendered",
    function() {
      e.trigger("rendered"),
      !t.animation.isFinished() || e[Cy] || e._scheduler.unfinished || e._pendingActions.length || e.trigger("finished")
    })
  }
  function Ql(t, e, n, i) {
    function r(t) {
      var e = "_ec_" + t.id + "_" + t.type,
      r = s[e];
      if (!r) {
        var h = uy(t.type),
        c = a ? Sm.getClass(h.main, h.sub) : ul.getClass(h.sub);
        r = new c,
        r.init(n, u),
        s[e] = r,
        o.push(r),
        l.add(r.group)
      }
      t.__viewId = r.__id = e,
      r.__alive = !0,
      r.__model = t,
      r.group.__ecComponentInfo = {
        mainType: t.mainType,
        index: t.componentIndex
      },
      !a && i.prepareView(r, t, n, u)
    }
    for (var a = "component" === e,
    o = a ? t._componentsViews: t._chartsViews, s = a ? t._componentsMap: t._chartsMap, l = t._zr, u = t._api, h = 0; h < o.length; h++) o[h].__alive = !1;
    a ? n.eachComponent(function(t, e) {
      "series" !== t && r(e)
    }) : n.eachSeries(r);
    for (var h = 0; h < o.length;) {
      var c = o[h];
      c.__alive ? h++:(!a && c.renderTask.dispose(), l.remove(c.group), c.dispose(n, u), o.splice(h, 1), delete s[c.__id], c.__id = c.group.__ecComponentInfo = null)
    }
  }
  function Kl(t) {
    t.clearColorPalette(),
    t.eachSeries(function(t) {
      t.clearColorPalette()
    })
  }
  function Jl(t, e, n, i) {
    tu(t, e, n, i),
    oy(t._chartsViews,
    function(t) {
      t.__alive = !1
    }),
    eu(t, e, n, i),
    oy(t._chartsViews,
    function(t) {
      t.__alive || t.remove(e, n)
    })
  }
  function tu(t, e, n, i, r) {
    oy(r || t._componentsViews,
    function(t) {
      var r = t.__model;
      t.render(r, e, n, i),
      au(r, t)
    })
  }
  function eu(t, e, n, i, r) {
    var a, o = t._scheduler;
    e.eachSeries(function(e) {
      var n = t._chartsMap[e.__viewId];
      n.__alive = !0;
      var s = n.renderTask;
      o.updatePayload(s, i),
      r && r.get(e.uid) && s.dirty(),
      a |= s.perform(o.getPerformArgs(s)),
      n.group.silent = !!e.get("silent"),
      au(e, n),
      ru(e, n)
    }),
    o.unfinished |= a,
    iu(t, e),
    Om(t._zr.dom, e)
  }
  function nu(t, e) {
    oy(By,
    function(n) {
      n(t, e)
    })
  }
  function iu(t, e) {
    var n = t._zr,
    i = n.storage,
    r = 0;
    i.traverse(function() {
      r++
    }),
    r > e.get("hoverLayerThreshold") && !tf.node && e.eachSeries(function(e) {
      if (!e.preventUsingHoverLayer) {
        var n = t._chartsMap[e.__viewId];
        n.__alive && n.group.traverse(function(t) {
          t.useHoverLayer = !0
        })
      }
    })
  }
  function ru(t, e) {
    var n = t.get("blendMode") || null;
    e.group.traverse(function(t) {
      t.isGroup || t.style.blend !== n && t.setStyle("blend", n),
      t.eachPendingDisplayable && t.eachPendingDisplayable(function(t) {
        t.setStyle("blend", n)
      })
    })
  }
  function au(t, e) {
    var n = t.get("z"),
    i = t.get("zlevel");
    e.group.traverse(function(t) {
      "group" !== t.type && (null != n && (t.z = n), null != i && (t.zlevel = i))
    })
  }
  function ou(t) {
    var e = t._coordSysMgr;
    return o(new bs(t), {
      getCoordinateSystems: y(e.getCoordinateSystems, e),
      getComponentByElement: function(e) {
        for (; e;) {
          var n = e.__ecComponentInfo;
          if (null != n) return t._model.getComponent(n.mainType, n.index);
          e = e.parent
        }
      }
    })
  }
  function su() {
    this.eventInfo
  }
  function lu(t) {
    function e(t, e) {
      for (var n = 0; n < t.length; n++) {
        var i = t[n];
        i[a] = e
      }
    }
    var n = 0,
    i = 1,
    r = 2,
    a = "__connectUpdateStatus";
    oy(Py,
    function(o, s) {
      t._messageCenter.on(s,
      function(o) {
        if (Hy[t.group] && t[a] !== n) {
          if (o && o.escapeConnect) return;
          var s = t.makeActionFromEvent(o),
          l = [];
          oy(Ny,
          function(e) {
            e !== t && e.group === t.group && l.push(e)
          }),
          e(l, n),
          oy(l,
          function(t) {
            t[a] !== i && t.dispatchAction(s)
          }),
          e(l, r)
        }
      })
    })
  }
  function uu(t, e, n) {
    var i = du(t);
    if (i) return i;
    var r = new Wl(t, e, n);
    return r.id = "ec_" + Vy++,
    Ny[r.id] = r,
    hr(t, Gy, r.id),
    lu(r),
    r
  }
  function hu(t) {
    if (x(t)) {
      var e = t;
      t = null,
      oy(e,
      function(e) {
        null != e.group && (t = e.group)
      }),
      t = t || "g_" + Wy++,
      oy(e,
      function(e) {
        e.group = t
      })
    }
    return Hy[t] = !0,
    t
  }
  function cu(t) {
    Hy[t] = !1
  }
  function fu(t) {
    "string" == typeof t ? t = Ny[t] : t instanceof Wl || (t = du(t)),
    t instanceof Wl && !t.isDisposed() && t.dispose()
  }
  function du(t) {
    return Ny[cr(t, Gy)]
  }
  function pu(t) {
    return Ny[t]
  }
  function gu(t, e) {
    zy[t] = e
  }
  function vu(t) {
    Ey.push(t)
  }
  function mu(t, e) {
    Su(Oy, t, e, dy)
  }
  function yu(t) {
    By.push(t)
  }
  function _u(t, e, n) {
    "function" == typeof e && (n = e, e = "");
    var i = ly(t) ? t.type: [t, t = {
      event: e
    }][0];
    t.event = (t.event || i).toLowerCase(),
    e = t.event,
    ay(ky.test(i) && ky.test(e)),
    Ly[i] || (Ly[i] = {
      action: n,
      actionInfo: t
    }),
    Py[e] = i
  }
  function xu(t, e) {
    Ms.register(t, e)
  }
  function wu(t) {
    var e = Ms.get(t);
    return e ? e.getDimensionsInfo ? e.getDimensionsInfo() : e.dimensions.slice() : void 0
  }
  function bu(t, e) {
    Su(Ry, t, e, my, "layout")
  }
  function Mu(t, e) {
    Su(Ry, t, e, xy, "visual")
  }
  function Su(t, e, n, i, r) { (sy(e) || ly(e)) && (n = e, e = i);
    var a = gl.wrapStageHandler(n, r);
    return a.__prio = e,
    a.__raw = n,
    t.push(a),
    a
  }
  function Tu(t, e) {
    Fy[t] = e
  }
  function Cu(t) {
    return Rv.extend(t)
  }
  function ku(t) {
    return Sm.extend(t)
  }
  function Iu(t) {
    return Mm.extend(t)
  }
  function Du(t) {
    return ul.extend(t)
  }
  function Au(t) {
    n("createCanvas", t)
  }
  function Lu(t, e, n) {
    iy.registerMap(t, e, n)
  }
  function Pu(t) {
    var e = iy.retrieveMap(t);
    return e && e[0] && {
      geoJson: e[0].geoJSON,
      specialAreas: e[0].specialAreas
    }
  }
  function Ou(t) {
    return t
  }
  function Eu(t, e, n, i, r) {
    this._old = t,
    this._new = e,
    this._oldKeyGetter = n || Ou,
    this._newKeyGetter = i || Ou,
    this.context = r
  }
  function Bu(t, e, n, i, r) {
    for (var a = 0; a < t.length; a++) {
      var o = "_ec_" + r[i](t[a], a),
      s = e[o];
      null == s ? (n.push(o), e[o] = a) : (s.length || (e[o] = s = [s]), s.push(a))
    }
  }
  function Ru(t) {
    var e = {},
    n = e.encode = {},
    i = F(),
    r = [],
    a = [],
    o = e.userOutput = {
      dimensionNames: t.dimensions.slice(),
      encode: {}
    };
    d(t.dimensions,
    function(e) {
      var s = t.getDimensionInfo(e),
      l = s.coordDim;
      if (l) {
        var u = s.coordDimIndex;
        zu(n, l)[u] = e,
        s.isExtraCoord || (i.set(l, 1), Nu(s.type) && (r[0] = e), zu(o.encode, l)[u] = s.index),
        s.defaultTooltip && a.push(e)
      }
      Uy.each(function(t, e) {
        var i = zu(n, e),
        r = s.otherDims[e];
        null != r && r !== !1 && (i[r] = s.name)
      })
    });
    var s = [],
    l = {};
    i.each(function(t, e) {
      var i = n[e];
      l[e] = i[0],
      s = s.concat(i)
    }),
    e.dataDimsOnCoord = s,
    e.encodeFirstDimNotExtra = l;
    var u = n.label;
    u && u.length && (r = u.slice());
    var h = n.tooltip;
    return h && h.length ? a = h.slice() : a.length || (a = r.slice()),
    n.defaultedLabel = r,
    n.defaultedTooltip = a,
    e
  }
  function zu(t, e) {
    return t.hasOwnProperty(e) || (t[e] = []),
    t[e]
  }
  function Fu(t) {
    return "category" === t ? "ordinal": "time" === t ? "time": "float"
  }
  function Nu(t) {
    return ! ("ordinal" === t || "time" === t)
  }
  function Hu(t) {
    null != t && o(this, t),
    this.otherDims = {}
  }
  function Vu(t) {
    return t._rawCount > 65535 ? Ky: t_
  }
  function Wu(t) {
    var e = t.constructor;
    return e === Array ? t.slice() : new e(t)
  }
  function Gu(t, e) {
    d(e_.concat(e.__wrappedMethods || []),
    function(n) {
      e.hasOwnProperty(n) && (t[n] = e[n])
    }),
    t.__wrappedMethods = e.__wrappedMethods,
    d(n_,
    function(n) {
      t[n] = i(e[n])
    }),
    t._calculationInfo = o(e._calculationInfo)
  }
  function Xu(t, e, n, i, r) {
    var a = Qy[e.type],
    o = i - 1,
    s = e.name,
    l = t[s][o];
    if (l && l.length < n) {
      for (var u = new a(Math.min(r - o * n, n)), h = 0; h < l.length; h++) u[h] = l[h];
      t[s][o] = u
    }
    for (var c = i * n; r > c; c += n) t[s].push(new a(Math.min(r - c, n)))
  }
  function qu(t) {
    var e = t._invertedIndicesMap;
    d(e,
    function(n, i) {
      var r = t._dimensionInfos[i],
      a = r.ordinalMeta;
      if (a) {
        n = e[i] = new Jy(a.categories.length);
        for (var o = 0; o < n.length; o++) n[o] = Zy;
        for (var o = 0; o < t._count; o++) n[t.get(i, o)] = o
      }
    })
  }
  function Uu(t, e, n) {
    var i;
    if (null != e) {
      var r = t._chunkSize,
      a = Math.floor(n / r),
      o = n % r,
      s = t.dimensions[e],
      l = t._storage[s][a];
      if (l) {
        i = l[o];
        var u = t._dimensionInfos[s].ordinalMeta;
        u && u.categories.length && (i = u.categories[i])
      }
    }
    return i
  }
  function Yu(t) {
    return t
  }
  function ju(t) {
    return t < this._count && t >= 0 ? this._indices[t] : -1
  }
  function Zu(t, e) {
    var n = t._idList[e];
    return null == n && (n = Uu(t, t._idDimIdx, e)),
    null == n && (n = $y + e),
    n
  }
  function $u(t) {
    return x(t) || (t = [t]),
    t
  }
  function Qu(t, e) {
    var n = t.dimensions,
    i = new i_(p(n, t.getDimensionInfo, t), t.hostModel);
    Gu(i, t);
    for (var r = i._storage = {},
    a = t._storage,
    o = 0; o < n.length; o++) {
      var s = n[o];
      a[s] && (u(e, s) >= 0 ? (r[s] = Ku(a[s]), i._rawExtent[s] = Ju(), i._extent[s] = null) : r[s] = a[s])
    }
    return i
  }
  function Ku(t) {
    for (var e = new Array(t.length), n = 0; n < t.length; n++) e[n] = Wu(t[n]);
    return e
  }
  function Ju() {
    return [1 / 0, -1 / 0]
  }
  function th(t, e, n) {
    function r(t, e, n) {
      null != Uy.get(e) ? t.otherDims[e] = n: (t.coordDim = e, t.coordDimIndex = n, u.set(e, !0))
    }
    es.isInstance(e) || (e = es.seriesDataToSource(e)),
    n = n || {},
    t = (t || []).slice();
    for (var a = (n.dimsDef || []).slice(), l = F(), u = F(), h = [], c = eh(e, t, a, n.dimCount), f = 0; c > f; f++) {
      var p = a[f] = o({},
      M(a[f]) ? a[f] : {
        name: a[f]
      }),
      g = p.name,
      v = h[f] = new Hu;
      null != g && null == l.get(g) && (v.name = v.displayName = g, l.set(g, f)),
      null != p.type && (v.type = p.type),
      null != p.displayName && (v.displayName = p.displayName)
    }
    var m = n.encodeDef; ! m && n.encodeDefaulter && (m = n.encodeDefaulter(e, c)),
    m = F(m),
    m.each(function(t, e) {
      if (t = Ki(t).slice(), 1 === t.length && !b(t[0]) && t[0] < 0) return void m.set(e, !1);
      var n = m.set(e, []);
      d(t,
      function(t, i) {
        b(t) && (t = l.get(t)),
        null != t && c > t && (n[i] = t, r(h[t], e, i))
      })
    });
    var y = 0;
    d(t,
    function(t) {
      var e, t, n, a;
      if (b(t)) e = t,
      t = {};
      else {
        e = t.name;
        var o = t.ordinalMeta;
        t.ordinalMeta = null,
        t = i(t),
        t.ordinalMeta = o,
        n = t.dimsDef,
        a = t.otherDims,
        t.name = t.coordDim = t.coordDimIndex = t.dimsDef = t.otherDims = null
      }
      var l = m.get(e);
      if (l !== !1) {
        var l = Ki(l);
        if (!l.length) for (var u = 0; u < (n && n.length || 1); u++) {
          for (; y < h.length && null != h[y].coordDim;) y++;
          y < h.length && l.push(y++)
        }
        d(l,
        function(i, o) {
          var l = h[i];
          if (r(s(l, t), e, o), null == l.name && n) {
            var u = n[o]; ! M(u) && (u = {
              name: u
            }),
            l.name = l.displayName = u.name,
            l.defaultTooltip = u.defaultTooltip
          }
          a && s(l.otherDims, a)
        })
      }
    });
    var _ = n.generateCoord,
    x = n.generateCoordCount,
    w = null != x;
    x = _ ? x || 1 : 0;
    for (var S = _ || "value",
    T = 0; c > T; T++) {
      var v = h[T] = h[T] || new Hu,
      C = v.coordDim;
      null == C && (v.coordDim = nh(S, u, w), v.coordDimIndex = 0, (!_ || 0 >= x) && (v.isExtraCoord = !0), x--),
      null == v.name && (v.name = nh(v.coordDim, l)),
      null != v.type || ds(e, T, v.name) !== Zv.Must && (!v.isExtraCoord || null == v.otherDims.itemName && null == v.otherDims.seriesName) || (v.type = "ordinal")
    }
    return h
  }
  function eh(t, e, n, i) {
    var r = Math.max(t.dimensionsDetectCount || 1, e.length, n.length, i || 0);
    return d(e,
    function(t) {
      var e = t.dimsDef;
      e && (r = Math.max(r, e.length))
    }),
    r
  }
  function nh(t, e, n) {
    if (n || null != e.get(t)) {
      for (var i = 0; null != e.get(t + i);) i++;
      t += i
    }
    return e.set(t, !0),
    t
  }
  function ih(t) {
    this.coordSysName = t,
    this.coordSysDims = [],
    this.axisMap = F(),
    this.categoryAxisMap = F(),
    this.firstCategoryDimIndex = null
  }
  function rh(t) {
    var e = t.get("coordinateSystem"),
    n = new ih(e),
    i = s_[e];
    return i ? (i(t, n, n.axisMap, n.categoryAxisMap), n) : void 0
  }
  function ah(t) {
    return "category" === t.get("type")
  }
  function oh(t, e, n) {
    n = n || {};
    var i, r, a, o, s = n.byIndex,
    l = n.stackedCoordDimension,
    u = !(!t || !t.get("stack"));
    if (d(e,
    function(t, n) {
      b(t) && (e[n] = t = {
        name: t
      }),
      u && !t.isExtraCoord && (s || i || !t.ordinalMeta || (i = t), r || "ordinal" === t.type || "time" === t.type || l && l !== t.coordDim || (r = t))
    }), !r || s || i || (s = !0), r) {
      a = "__\x00ecstackresult",
      o = "__\x00ecstackedover",
      i && (i.createInvertedIndices = !0);
      var h = r.coordDim,
      c = r.type,
      f = 0;
      d(e,
      function(t) {
        t.coordDim === h && f++
      }),
      e.push({
        name: a,
        coordDim: h,
        coordDimIndex: f,
        type: c,
        isExtraCoord: !0,
        isCalculationCoord: !0
      }),
      f++,
      e.push({
        name: o,
        coordDim: o,
        coordDimIndex: f,
        type: c,
        isExtraCoord: !0,
        isCalculationCoord: !0
      })
    }
    return {
      stackedDimension: r && r.name,
      stackedByDimension: i && i.name,
      isStackedByIndex: s,
      stackedOverDimension: o,
      stackResultDimension: a
    }
  }
  function sh(t, e) {
    return !! e && e === t.getCalculationInfo("stackedDimension")
  }
  function lh(t, e) {
    return sh(t, e) ? t.getCalculationInfo("stackResultDimension") : e
  }
  function uh(t, e, n) {
    n = n || {},
    es.isInstance(t) || (t = es.seriesDataToSource(t));
    var i, r = e.get("coordinateSystem"),
    a = Ms.get(r),
    o = rh(e);
    o && (i = p(o.coordSysDims,
    function(t) {
      var e = {
        name: t
      },
      n = o.axisMap.get(t);
      if (n) {
        var i = n.get("type");
        e.type = Fu(i)
      }
      return e
    })),
    i || (i = a && (a.getDimensionsInfo ? a.getDimensionsInfo() : a.dimensions.slice()) || ["x", "y"]);
    var s, l, u = o_(t, {
      coordDimensions: i,
      generateCoord: n.generateCoord,
      encodeDefaulter: n.useEncodeDefaulter ? _(hs, i, e) : null
    });
    o && d(u,
    function(t, e) {
      var n = t.coordDim,
      i = o.categoryAxisMap.get(n);
      i && (null == s && (s = e), t.ordinalMeta = i.getOrdinalMeta()),
      null != t.otherDims.itemName && (l = !0)
    }),
    l || null == s || (u[s].otherDims.itemName = 0);
    var h = oh(e, u),
    c = new i_(u, e);
    c.setCalculationInfo(h);
    var f = null != s && hh(t) ?
    function(t, e, n, i) {
      return i === s ? n: this.defaultDimValueGetter(t, e, n, i)
    }: null;
    return c.hasItemOption = !1,
    c.initData(t, null, f),
    c
  }
  function hh(t) {
    if (t.sourceFormat === Vv) {
      var e = ch(t.data || []);
      return null != e && !x(tr(e))
    }
  }
  function ch(t) {
    for (var e = 0; e < t.length && null == t[e];) e++;
    return t[e]
  }
  function fh(t) {
    this._setting = t || {},
    this._extent = [1 / 0, -1 / 0],
    this._interval = 0,
    this.init && this.init.apply(this, arguments)
  }
  function dh(t) {
    this.categories = t.categories || [],
    this._needCollect = t.needCollect,
    this._deduplication = t.deduplication,
    this._map
  }
  function ph(t) {
    return t._map || (t._map = F(t.categories))
  }
  function gh(t) {
    return M(t) && null != t.value ? t.value: t + ""
  }
  function vh(t, e, n, i) {
    var r = {},
    a = t[1] - t[0],
    o = r.interval = Po(a / e, !0);
    null != n && n > o && (o = r.interval = n),
    null != i && o > i && (o = r.interval = i);
    var s = r.intervalPrecision = mh(o),
    l = r.niceTickExtent = [c_(Math.ceil(t[0] / o) * o, s), c_(Math.floor(t[1] / o) * o, s)];
    return _h(l, t),
    r
  }
  function mh(t) {
    return So(t) + 2
  }
  function yh(t, e, n) {
    t[e] = Math.max(Math.min(t[e], n[1]), n[0])
  }
  function _h(t, e) { ! isFinite(t[0]) && (t[0] = e[0]),
    !isFinite(t[1]) && (t[1] = e[1]),
    yh(t, 0, e),
    yh(t, 1, e),
    t[0] > t[1] && (t[0] = t[1])
  }
  function xh(t) {
    return t.get("stack") || p_ + t.seriesIndex
  }
  function wh(t) {
    return t.dim + t.index
  }
  function bh(t, e) {
    var n = [];
    return e.eachSeriesByType(t,
    function(t) {
      kh(t) && !Ih(t) && n.push(t)
    }),
    n
  }
  function Mh(t) {
    var e = {};
    d(t,
    function(t) {
      var n = t.coordinateSystem,
      i = n.getBaseAxis();
      if ("time" === i.type || "value" === i.type) for (var r = t.getData(), a = i.dim + "_" + i.index, o = r.mapDimension(i.dim), s = 0, l = r.count(); l > s; ++s) {
        var u = r.get(o, s);
        e[a] ? e[a].push(u) : e[a] = [u]
      }
    });
    var n = [];
    for (var i in e) if (e.hasOwnProperty(i)) {
      var r = e[i];
      if (r) {
        r.sort(function(t, e) {
          return t - e
        });
        for (var a = null,
        o = 1; o < r.length; ++o) {
          var s = r[o] - r[o - 1];
          s > 0 && (a = null === a ? s: Math.min(a, s))
        }
        n[i] = a
      }
    }
    return n
  }
  function Sh(t) {
    var e = Mh(t),
    n = [];
    return d(t,
    function(t) {
      var i, r = t.coordinateSystem,
      a = r.getBaseAxis(),
      o = a.getExtent();
      if ("category" === a.type) i = a.getBandWidth();
      else if ("value" === a.type || "time" === a.type) {
        var s = a.dim + "_" + a.index,
        l = e[s],
        u = Math.abs(o[1] - o[0]),
        h = a.scale.getExtent(),
        c = Math.abs(h[1] - h[0]);
        i = l ? u / c * l: u
      } else {
        var f = t.getData();
        i = Math.abs(o[1] - o[0]) / f.count()
      }
      var d = xo(t.get("barWidth"), i),
      p = xo(t.get("barMaxWidth"), i),
      g = xo(t.get("barMinWidth") || 1, i),
      v = t.get("barGap"),
      m = t.get("barCategoryGap");
      n.push({
        bandWidth: i,
        barWidth: d,
        barMaxWidth: p,
        barMinWidth: g,
        barGap: v,
        barCategoryGap: m,
        axisKey: wh(a),
        stackId: xh(t)
      })
    }),
    Th(n)
  }
  function Th(t) {
    var e = {};
    d(t,
    function(t) {
      var n = t.axisKey,
      i = t.bandWidth,
      r = e[n] || {
        bandWidth: i,
        remainedWidth: i,
        autoWidthCount: 0,
        categoryGap: "20%",
        gap: "30%",
        stacks: {}
      },
      a = r.stacks;
      e[n] = r;
      var o = t.stackId;
      a[o] || r.autoWidthCount++,
      a[o] = a[o] || {
        width: 0,
        maxWidth: 0
      };
      var s = t.barWidth;
      s && !a[o].width && (a[o].width = s, s = Math.min(r.remainedWidth, s), r.remainedWidth -= s);
      var l = t.barMaxWidth;
      l && (a[o].maxWidth = l);
      var u = t.barMinWidth;
      u && (a[o].minWidth = u);
      var h = t.barGap;
      null != h && (r.gap = h);
      var c = t.barCategoryGap;
      null != c && (r.categoryGap = c)
    });
    var n = {};
    return d(e,
    function(t, e) {
      n[e] = {};
      var i = t.stacks,
      r = t.bandWidth,
      a = xo(t.categoryGap, r),
      o = xo(t.gap, 1),
      s = t.remainedWidth,
      l = t.autoWidthCount,
      u = (s - a) / (l + (l - 1) * o);
      u = Math.max(u, 0),
      d(i,
      function(t) {
        var e = t.maxWidth,
        n = t.minWidth;
        if (t.width) {
          var i = t.width;
          e && (i = Math.min(i, e)),
          n && (i = Math.max(i, n)),
          t.width = i,
          s -= i + o * i,
          l--
        } else {
          var i = u;
          e && i > e && (i = Math.min(e, s)),
          n && n > i && (i = n),
          i !== u && (t.width = i, s -= i + o * i, l--)
        }
      }),
      u = (s - a) / (l + (l - 1) * o),
      u = Math.max(u, 0);
      var h, c = 0;
      d(i,
      function(t) {
        t.width || (t.width = u),
        h = t,
        c += t.width * (1 + o)
      }),
      h && (c -= h.width * o);
      var f = -c / 2;
      d(i,
      function(t, i) {
        n[e][i] = n[e][i] || {
          bandWidth: r,
          offset: f,
          width: t.width
        },
        f += t.width * (1 + o)
      })
    }),
    n
  }
  function Ch(t, e, n) {
    if (t && e) {
      var i = t[wh(e)];
      return null != i && null != n && (i = i[xh(n)]),
      i
    }
  }
  function kh(t) {
    return t.coordinateSystem && "cartesian2d" === t.coordinateSystem.type
  }
  function Ih(t) {
    return t.pipelineContext && t.pipelineContext.large
  }
  function Dh(t, e) {
    return e.toGlobalCoord(e.dataToCoord("log" === e.type ? 1 : 0))
  }
  function Ah(t, e) {
    return A_(t, D_(e))
  }
  function Lh(t, e) {
    var n, i, r, a = t.type,
    o = e.getMin(),
    s = e.getMax(),
    l = t.getExtent();
    "ordinal" === a ? n = e.getCategories().length: (i = e.get("boundaryGap"), x(i) || (i = [i || 0, i || 0]), "boolean" == typeof i[0] && (i = [0, 0]), i[0] = xo(i[0], 1), i[1] = xo(i[1], 1), r = l[1] - l[0] || Math.abs(l[0])),
    "dataMin" === o ? o = l[0] : "function" == typeof o && (o = o({
      min: l[0],
      max: l[1]
    })),
    "dataMax" === s ? s = l[1] : "function" == typeof s && (s = s({
      min: l[0],
      max: l[1]
    }));
    var u = null != o,
    h = null != s;
    null == o && (o = "ordinal" === a ? n ? 0 : 0 / 0 : l[0] - i[0] * r),
    null == s && (s = "ordinal" === a ? n ? n - 1 : 0 / 0 : l[1] + i[1] * r),
    (null == o || !isFinite(o)) && (o = 0 / 0),
    (null == s || !isFinite(s)) && (s = 0 / 0),
    t.setBlank(k(o) || k(s) || "ordinal" === a && !t.getOrdinalMeta().categories.length),
    e.getNeedCrossZero() && (o > 0 && s > 0 && !u && (o = 0), 0 > o && 0 > s && !h && (s = 0));
    var c = e.ecModel;
    if (c && "time" === a) {
      var f, p = bh("bar", c);
      if (d(p,
      function(t) {
        f |= t.getBaseAxis() === e.axis
      }), f) {
        var g = Sh(p),
        v = Ph(o, s, e, g);
        o = v.min,
        s = v.max
      }
    }
    return {
      extent: [o, s],
      fixMin: u,
      fixMax: h
    }
  }
  function Ph(t, e, n, i) {
    var r = n.axis.getExtent(),
    a = r[1] - r[0],
    o = Ch(i, n.axis);
    if (void 0 === o) return {
      min: t,
      max: e
    };
    var s = 1 / 0;
    d(o,
    function(t) {
      s = Math.min(t.offset, s)
    });
    var l = -1 / 0;
    d(o,
    function(t) {
      l = Math.max(t.offset + t.width, l)
    }),
    s = Math.abs(s),
    l = Math.abs(l);
    var u = s + l,
    h = e - t,
    c = 1 - (s + l) / a,
    f = h / c - h;
    return e += f * (l / u),
    t -= f * (s / u),
    {
      min: t,
      max: e
    }
  }
  function Oh(t, e) {
    var n = Lh(t, e),
    i = n.extent,
    r = e.get("splitNumber");
    "log" === t.type && (t.base = e.get("logBase"));
    var a = t.type;
    t.setExtent(i[0], i[1]),
    t.niceExtent({
      splitNumber: r,
      fixMin: n.fixMin,
      fixMax: n.fixMax,
      minInterval: "interval" === a || "time" === a ? e.get("minInterval") : null,
      maxInterval: "interval" === a || "time" === a ? e.get("maxInterval") : null
    });
    var o = e.get("interval");
    null != o && t.setInterval && t.setInterval(o)
  }
  function Eh(t, e) {
    if (e = e || t.get("type")) switch (e) {
    case "category":
      return new h_(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(), [1 / 0, -1 / 0]);
    case "value":
      return new d_;
    default:
      return (fh.getClass(e) || d_).create(t)
    }
  }
  function Bh(t) {
    var e = t.scale.getExtent(),
    n = e[0],
    i = e[1];
    return ! (n > 0 && i > 0 || 0 > n && 0 > i)
  }
  function Rh(t) {
    var e = t.getLabelModel().get("formatter"),
    n = "category" === t.type ? t.scale.getExtent()[0] : null;
    return "string" == typeof e ? e = function(e) {
      return function(n) {
        return n = t.scale.getLabel(n),
        e.replace("{value}", null != n ? n: "")
      }
    } (e) : "function" == typeof e ?
    function(i, r) {
      return null != n && (r = i - n),
      e(zh(t, i), r)
    }: function(e) {
      return t.scale.getLabel(e)
    }
  }
  function zh(t, e) {
    return "category" === t.type ? t.scale.getLabel(e) : e
  }
  function Fh(t) {
    var e = t.model,
    n = t.scale;
    if (e.get("axisLabel.show") && !n.isBlank()) {
      var i, r, a = "category" === t.type,
      o = n.getExtent();
      a ? r = n.count() : (i = n.getTicks(), r = i.length);
      var s, l = t.getLabelModel(),
      u = Rh(t),
      h = 1;
      r > 40 && (h = Math.ceil(r / 40));
      for (var c = 0; r > c; c += h) {
        var f = i ? i[c] : o[0] + c,
        d = u(f),
        p = l.getTextRect(d),
        g = Nh(p, l.get("rotate") || 0);
        s ? s.union(g) : s = g
      }
      return s
    }
  }
  function Nh(t, e) {
    var n = e * Math.PI / 180,
    i = t.plain(),
    r = i.width,
    a = i.height,
    o = r * Math.cos(n) + a * Math.sin(n),
    s = r * Math.sin(n) + a * Math.cos(n),
    l = new Tn(i.x, i.y, o, s);
    return l
  }
  function Hh(t) {
    var e = t.get("interval");
    return null == e ? "auto": e
  }
  function Vh(t) {
    return "category" === t.type && 0 === Hh(t.getLabelModel())
  }
  function Wh(t, e) {
    if ("image" !== this.type) {
      var n = this.style,
      i = this.shape;
      i && "line" === i.symbolType ? n.stroke = t: this.__isEmptyBrush ? (n.stroke = t, n.fill = e || "#fff") : (n.fill && (n.fill = t), n.stroke && (n.stroke = t)),
      this.dirty(!1)
    }
  }
  function Gh(t, e, n, i, r, a, o) {
    var s = 0 === t.indexOf("empty");
    s && (t = t.substr(5, 1).toLowerCase() + t.substr(6));
    var l;
    return l = 0 === t.indexOf("image://") ? ya(t.slice(8), new Tn(e, n, i, r), o ? "center": "cover") : 0 === t.indexOf("path://") ? ma(t.slice(7), {},
    new Tn(e, n, i, r), o ? "center": "cover") : new X_({
      shape: {
        symbolType: t,
        x: e,
        y: n,
        width: i,
        height: r
      }
    }),
    l.__isEmptyBrush = s,
    l.setColor = Wh,
    l.setColor(a),
    l
  }
  function Xh(t) {
    return uh(t.getSource(), t)
  }
  function qh(t, e) {
    var n = e;
    co.isInstance(e) || (n = new co(e), c(n, R_));
    var i = Eh(n);
    return i.setExtent(t[0], t[1]),
    Oh(i, n),
    i
  }
  function Uh(t) {
    c(t, R_)
  }
  function Yh(t, e) {
    return Math.abs(t - e) < Y_
  }
  function jh(t, e, n) {
    var i = 0,
    r = t[0];
    if (!r) return ! 1;
    for (var a = 1; a < t.length; a++) {
      var o = t[a];
      i += Xr(r[0], r[1], o[0], o[1], e, n),
      r = o
    }
    var s = t[0];
    return Yh(r[0], s[0]) && Yh(r[1], s[1]) || (i += Xr(r[0], r[1], s[0], s[1], e, n)),
    0 !== i
  }
  function Zh(t, e, n) {
    if (this.name = t, this.geometries = e, n) n = [n[0], n[1]];
    else {
      var i = this.getBoundingRect();
      n = [i.x + i.width / 2, i.y + i.height / 2]
    }
    this.center = n
  }
  function $h(t) {
    if (!t.UTF8Encoding) return t;
    var e = t.UTF8Scale;
    null == e && (e = 1024);
    for (var n = t.features,
    i = 0; i < n.length; i++) for (var r = n[i], a = r.geometry, o = a.coordinates, s = a.encodeOffsets, l = 0; l < o.length; l++) {
      var u = o[l];
      if ("Polygon" === a.type) o[l] = Qh(u, s[l], e);
      else if ("MultiPolygon" === a.type) for (var h = 0; h < u.length; h++) {
        var c = u[h];
        u[h] = Qh(c, s[l][h], e)
      }
    }
    return t.UTF8Encoding = !1,
    t
  }
  function Qh(t, e, n) {
    for (var i = [], r = e[0], a = e[1], o = 0; o < t.length; o += 2) {
      var s = t.charCodeAt(o) - 64,
      l = t.charCodeAt(o + 1) - 64;
      s = s >> 1 ^ -(1 & s),
      l = l >> 1 ^ -(1 & l),
      s += r,
      l += a,
      r = s,
      a = l,
      i.push([s / n, l / n])
    }
    return i
  }
  function Kh(t) {
    return "category" === t.type ? tc(t) : ic(t)
  }
  function Jh(t, e) {
    return "category" === t.type ? nc(t, e) : {
      ticks: t.scale.getTicks()
    }
  }
  function tc(t) {
    var e = t.getLabelModel(),
    n = ec(t, e);
    return ! e.get("show") || t.scale.isBlank() ? {
      labels: [],
      labelCategoryInterval: n.labelCategoryInterval
    }: n
  }
  function ec(t, e) {
    var n = rc(t, "labels"),
    i = Hh(e),
    r = ac(n, i);
    if (r) return r;
    var a, o;
    return w(i) ? a = cc(t, i) : (o = "auto" === i ? sc(t) : i, a = hc(t, o)),
    oc(n, i, {
      labels: a,
      labelCategoryInterval: o
    })
  }
  function nc(t, e) {
    var n = rc(t, "ticks"),
    i = Hh(e),
    r = ac(n, i);
    if (r) return r;
    var a, o;
    if ((!e.get("show") || t.scale.isBlank()) && (a = []), w(i)) a = cc(t, i, !0);
    else if ("auto" === i) {
      var s = ec(t, t.getLabelModel());
      o = s.labelCategoryInterval,
      a = p(s.labels,
      function(t) {
        return t.tickValue
      })
    } else o = i,
    a = hc(t, o, !0);
    return oc(n, i, {
      ticks: a,
      tickCategoryInterval: o
    })
  }
  function ic(t) {
    var e = t.scale.getTicks(),
    n = Rh(t);
    return {
      labels: p(e,
      function(e, i) {
        return {
          formattedLabel: n(e, i),
          rawLabel: t.scale.getLabel(e),
          tickValue: e
        }
      })
    }
  }
  function rc(t, e) {
    return Z_(t)[e] || (Z_(t)[e] = [])
  }
  function ac(t, e) {
    for (var n = 0; n < t.length; n++) if (t[n].key === e) return t[n].value
  }
  function oc(t, e, n) {
    return t.push({
      key: e,
      value: n
    }),
    n
  }
  function sc(t) {
    var e = Z_(t).autoInterval;
    return null != e ? e: Z_(t).autoInterval = t.calculateCategoryInterval()
  }
  function lc(t) {
    var e = uc(t),
    n = Rh(t),
    i = (e.axisRotate - e.labelRotate) / 180 * Math.PI,
    r = t.scale,
    a = r.getExtent(),
    o = r.count();
    if (a[1] - a[0] < 1) return 0;
    var s = 1;
    o > 40 && (s = Math.max(1, Math.floor(o / 40)));
    for (var l = a[0], u = t.dataToCoord(l + 1) - t.dataToCoord(l), h = Math.abs(u * Math.cos(i)), c = Math.abs(u * Math.sin(i)), f = 0, d = 0; l <= a[1]; l += s) {
      var p = 0,
      g = 0,
      v = Xn(n(l), e.font, "center", "top");
      p = 1.3 * v.width,
      g = 1.3 * v.height,
      f = Math.max(f, p, 7),
      d = Math.max(d, g, 7)
    }
    var m = f / h,
    y = d / c;
    isNaN(m) && (m = 1 / 0),
    isNaN(y) && (y = 1 / 0);
    var _ = Math.max(0, Math.floor(Math.min(m, y))),
    x = Z_(t.model),
    w = t.getExtent(),
    b = x.lastAutoInterval,
    M = x.lastTickCount;
    return null != b && null != M && Math.abs(b - _) <= 1 && Math.abs(M - o) <= 1 && b > _ && x.axisExtend0 === w[0] && x.axisExtend1 === w[1] ? _ = b: (x.lastTickCount = o, x.lastAutoInterval = _, x.axisExtend0 = w[0], x.axisExtend1 = w[1]),
    _
  }
  function uc(t) {
    var e = t.getLabelModel();
    return {
      axisRotate: t.getRotate ? t.getRotate() : t.isHorizontal && !t.isHorizontal() ? 90 : 0,
      labelRotate: e.get("rotate") || 0,
      font: e.getFont()
    }
  }
  function hc(t, e, n) {
    function i(t) {
      l.push(n ? t: {
        formattedLabel: r(t),
        rawLabel: a.getLabel(t),
        tickValue: t
      })
    }
    var r = Rh(t),
    a = t.scale,
    o = a.getExtent(),
    s = t.getLabelModel(),
    l = [],
    u = Math.max((e || 0) + 1, 1),
    h = o[0],
    c = a.count();
    0 !== h && u > 1 && c / u > 2 && (h = Math.round(Math.ceil(h / u) * u));
    var f = Vh(t),
    d = s.get("showMinLabel") || f,
    p = s.get("showMaxLabel") || f;
    d && h !== o[0] && i(o[0]);
    for (var g = h; g <= o[1]; g += u) i(g);
    return p && g - u !== o[1] && i(o[1]),
    l
  }
  function cc(t, e, n) {
    var i = t.scale,
    r = Rh(t),
    a = [];
    return d(i.getTicks(),
    function(t) {
      var o = i.getLabel(t);
      e(t, o) && a.push(n ? t: {
        formattedLabel: r(t),
        rawLabel: o,
        tickValue: t
      })
    }),
    a
  }
  function fc(t, e) {
    var n = t[1] - t[0],
    i = e,
    r = n / i / 2;
    t[0] += r,
    t[1] -= r
  }
  function dc(t, e, n, i) {
    function r(t, e) {
      return t = wo(t),
      e = wo(e),
      f ? t > e: e > t
    }
    var a = e.length;
    if (t.onBand && !n && a) {
      var o, s, l = t.getExtent();
      if (1 === a) e[0].coord = l[0],
      o = e[1] = {
        coord: l[0]
      };
      else {
        var u = e[a - 1].tickValue - e[0].tickValue,
        h = (e[a - 1].coord - e[0].coord) / u;
        d(e,
        function(t) {
          t.coord -= h / 2
        });
        var c = t.scale.getExtent();
        s = 1 + c[1] - e[a - 1].tickValue,
        o = {
          coord: e[a - 1].coord + h * s
        },
        e.push(o)
      }
      var f = l[0] > l[1];
      r(e[0].coord, l[0]) && (i ? e[0].coord = l[0] : e.shift()),
      i && r(l[0], e[0].coord) && e.unshift({
        coord: l[0]
      }),
      r(l[1], o.coord) && (i ? o.coord = l[1] : e.pop()),
      i && r(o.coord, l[1]) && e.push({
        coord: l[1]
      })
    }
  }
  function pc(t, e) {
    this.getAllNames = function() {
      var t = e();
      return t.mapArray(t.getName)
    },
    this.containName = function(t) {
      var n = e();
      return n.indexOfName(t) >= 0
    },
    this.indexOfName = function(e) {
      var n = t();
      return n.indexOfName(e)
    },
    this.getItemVisual = function(e, n) {
      var i = t();
      return i.getItemVisual(e, n)
    }
  }
  function gc(t, e, n, i) {
    var r = e.getData(),
    a = this.dataIndex,
    o = r.getName(a),
    s = e.get("selectedOffset");
    i.dispatchAction({
      type: "pieToggleSelect",
      from: t,
      name: o,
      seriesId: e.id
    }),
    r.each(function(t) {
      vc(r.getItemGraphicEl(t), r.getItemLayout(t), e.isSelected(r.getName(t)), s, n)
    })
  }
  function vc(t, e, n, i, r) {
    var a = (e.startAngle + e.endAngle) / 2,
    o = Math.cos(a),
    s = Math.sin(a),
    l = n ? i: 0,
    u = [o * l, s * l];
    r ? t.animate().when(200, {
      position: u
    }).start("bounceOut") : t.attr("position", u)
  }
  function mc(t, e) {
    pd.call(this);
    var n = new Og({
      z2: 2
    }),
    i = new Fg,
    r = new Dg;
    this.add(n),
    this.add(i),
    this.add(r),
    this.updateData(t, e, !0)
  }
  function yc(t, e, n, i, r, a, o, s, l, u) {
    function h(e, n, i) {
      for (var r = e; n > r && !(t[r].y + i > l + o); r++) if (t[r].y += i, r > e && n > r + 1 && t[r + 1].y > t[r].y + t[r].height) return void c(r, i / 2);
      c(n - 1, i / 2)
    }
    function c(e, n) {
      for (var i = e; i >= 0 && !(t[i].y - n < l) && (t[i].y -= n, !(i > 0 && t[i].y > t[i - 1].y + t[i - 1].height)); i--);
    }
    function f(t, e, n, i, r, a) {
      for (var o = a > 0 ? e ? Number.MAX_VALUE: 0 : e ? Number.MAX_VALUE: 0, s = 0, l = t.length; l > s; s++) if ("none" === t[s].labelAlignTo) {
        var u = Math.abs(t[s].y - i),
        h = t[s].len,
        c = t[s].len2,
        f = r + h > u ? Math.sqrt((r + h + c) * (r + h + c) - u * u) : Math.abs(t[s].x - n);
        e && f >= o && (f = o - 10),
        !e && o >= f && (f = o + 10),
        t[s].x = n + f * a,
        o = f
      }
    }
    t.sort(function(t, e) {
      return t.y - e.y
    });
    for (var d, p = 0,
    g = t.length,
    v = [], m = [], y = 0; g > y; y++) {
      if ("outer" === t[y].position && "labelLine" === t[y].labelAlignTo) {
        var _ = t[y].x - u;
        t[y].linePoints[1][0] += _,
        t[y].x = u
      }
      d = t[y].y - p,
      0 > d && h(y, g, -d, r),
      p = t[y].y + t[y].height
    }
    0 > o - p && c(g - 1, p - o);
    for (var y = 0; g > y; y++) t[y].y >= n ? m.push(t[y]) : v.push(t[y]);
    f(v, !1, e, n, i, r),
    f(m, !0, e, n, i, r)
  }
  function _c(t, e, n, i, r, a, o, s) {
    for (var l = [], u = [], h = Number.MAX_VALUE, c = -Number.MAX_VALUE, f = 0; f < t.length; f++) xc(t[f]) || (t[f].x < e ? (h = Math.min(h, t[f].x), l.push(t[f])) : (c = Math.max(c, t[f].x), u.push(t[f])));
    yc(u, e, n, i, 1, r, a, o, s, c),
    yc(l, e, n, i, -1, r, a, o, s, h);
    for (var f = 0; f < t.length; f++) {
      var d = t[f];
      if (!xc(d)) {
        var p = d.linePoints;
        if (p) {
          var g, v = "edge" === d.labelAlignTo,
          m = d.textRect.width;
          g = v ? d.x < e ? p[2][0] - d.labelDistance - o - d.labelMargin: o + r - d.labelMargin - p[2][0] - d.labelDistance: d.x < e ? d.x - o - d.bleedMargin: o + r - d.x - d.bleedMargin,
          g < d.textRect.width && (d.text = $n(d.text, g, d.font), "edge" === d.labelAlignTo && (m = Gn(d.text, d.font)));
          var y = p[1][0] - p[2][0];
          v ? p[2][0] = d.x < e ? o + d.labelMargin + m + d.labelDistance: o + r - d.labelMargin - m - d.labelDistance: (p[2][0] = d.x < e ? d.x + d.labelDistance: d.x - d.labelDistance, p[1][0] = p[2][0] + y),
          p[1][1] = p[2][1] = d.y
        }
      }
    }
  }
  function xc(t) {
    return "center" === t.position
  }
  function wc(t, e) {
    return Zo(t.getBoxLayoutParams(), {
      width: e.getWidth(),
      height: e.getHeight()
    })
  }
  function bc(t) {
    return this._axes[t]
  }
  function Mc(t) {
    dx.call(this, t)
  }
  function Sc(t, e) {
    return e.type || (e.data ? "category": "value")
  }
  function Tc(t, e) {
    return t.getCoordSysModel() === e
  }
  function Cc(t, e, n) {
    this._coordsMap = {},
    this._coordsList = [],
    this._axesMap = {},
    this._axesList = [],
    this._initCartesian(t, e, n),
    this.model = t
  }
  function kc(t, e, n, i) {
    function r(t) {
      return t.dim + "_" + t.index
    }
    n.getAxesOnZeroOf = function() {
      return a ? [a] : []
    };
    var a, o = t[e],
    s = n.model,
    l = s.get("axisLine.onZero"),
    u = s.get("axisLine.onZeroAxisIndex");
    if (l) {
      if (null != u) Ic(o[u]) && (a = o[u]);
      else for (var h in o) if (o.hasOwnProperty(h) && Ic(o[h]) && !i[r(o[h])]) {
        a = o[h];
        break
      }
      a && (i[r(a)] = !0)
    }
  }
  function Ic(t) {
    return t && "category" !== t.type && "time" !== t.type && Bh(t)
  }
  function Dc(t, e) {
    var n = t.getExtent(),
    i = n[0] + n[1];
    t.toGlobalCoord = "x" === t.dim ?
    function(t) {
      return t + e
    }: function(t) {
      return i - t + e
    },
    t.toLocalCoord = "x" === t.dim ?
    function(t) {
      return t - e
    }: function(t) {
      return i - t + e
    }
  }
  function Ac(t) {
    return p(Mx,
    function(e) {
      var n = t.getReferringComponents(e)[0];
      return n
    })
  }
  function Lc(t) {
    return "cartesian2d" === t.get("coordinateSystem")
  }
  function Pc(t, e, n, i) {
    var r, a, o = ko(n - t.rotation),
    s = i[0] > i[1],
    l = "start" === e && !s || "start" !== e && s;
    return Io(o - Sx / 2) ? (a = l ? "bottom": "top", r = "center") : Io(o - 1.5 * Sx) ? (a = l ? "top": "bottom", r = "center") : (a = "middle", r = 1.5 * Sx > o && o > Sx / 2 ? l ? "left": "right": l ? "right": "left"),
    {
      rotation: o,
      textAlign: r,
      textVerticalAlign: a
    }
  }
  function Oc(t, e, n) {
    if (!Vh(t.axis)) {
      var i = t.get("axisLabel.showMinLabel"),
      r = t.get("axisLabel.showMaxLabel");
      e = e || [],
      n = n || [];
      var a = e[0],
      o = e[1],
      s = e[e.length - 1],
      l = e[e.length - 2],
      u = n[0],
      h = n[1],
      c = n[n.length - 1],
      f = n[n.length - 2];
      i === !1 ? (Ec(a), Ec(u)) : Bc(a, o) && (i ? (Ec(o), Ec(h)) : (Ec(a), Ec(u))),
      r === !1 ? (Ec(s), Ec(c)) : Bc(l, s) && (r ? (Ec(l), Ec(f)) : (Ec(s), Ec(c)))
    }
  }
  function Ec(t) {
    t && (t.ignore = !0)
  }
  function Bc(t, e) {
    var n = t && t.getBoundingRect().clone(),
    i = e && e.getBoundingRect().clone();
    if (n && i) {
      var r = Pe([]);
      return Re(r, r, -t.rotation),
      n.applyTransform(Ee([], r, t.getLocalTransform())),
      i.applyTransform(Ee([], r, e.getLocalTransform())),
      n.intersect(i)
    }
  }
  function Rc(t) {
    return "middle" === t || "center" === t
  }
  function zc(t, e, n, i, r) {
    for (var a = [], o = [], s = [], l = 0; l < t.length; l++) {
      var u = t[l].coord;
      o[0] = u,
      o[1] = 0,
      s[0] = u,
      s[1] = n,
      e && (ae(o, o, e), ae(s, s, e));
      var h = new Gg({
        anid: r + "_" + t[l].tickValue,
        subPixelOptimize: !0,
        shape: {
          x1: o[0],
          y1: o[1],
          x2: s[0],
          y2: s[1]
        },
        style: i,
        z2: 2,
        silent: !0
      });
      a.push(h)
    }
    return a
  }
  function Fc(t, e, n) {
    var i = e.axis,
    r = e.getModel("axisTick");
    if (r.get("show") && !i.scale.isBlank()) {
      for (var a = r.getModel("lineStyle"), o = n.tickDirection * r.get("length"), l = i.getTicksCoords(), u = zc(l, t._transform, o, s(a.getLineStyle(), {
        stroke: e.get("axisLine.lineStyle.color")
      }), "ticks"), h = 0; h < u.length; h++) t.group.add(u[h]);
      return u
    }
  }
  function Nc(t, e, n) {
    var i = e.axis,
    r = e.getModel("minorTick");
    if (r.get("show") && !i.scale.isBlank()) {
      var a = i.getMinorTicksCoords();
      if (a.length) for (var o = r.getModel("lineStyle"), l = n.tickDirection * r.get("length"), u = s(o.getLineStyle(), s(e.getModel("axisTick").getLineStyle(), {
        stroke: e.get("axisLine.lineStyle.color")
      })), h = 0; h < a.length; h++) for (var c = zc(a[h], t._transform, l, u, "minorticks_" + h), f = 0; f < c.length; f++) t.group.add(c[f])
    }
  }
  function Hc(t, e, n) {
    var i = e.axis,
    r = I(n.axisLabelShow, e.get("axisLabel.show"));
    if (r && !i.scale.isBlank()) {
      var a = e.getModel("axisLabel"),
      o = a.get("margin"),
      s = i.getViewLabels(),
      l = (I(n.labelRotate, a.get("rotate")) || 0) * Sx / 180,
      u = Ix(n.rotation, l, n.labelDirection),
      h = e.getCategories && e.getCategories(!0),
      c = [],
      f = Dx(e),
      p = e.get("triggerEvent");
      return d(s,
      function(r, s) {
        var l = r.tickValue,
        d = r.formattedLabel,
        g = r.rawLabel,
        v = a;
        h && h[l] && h[l].textStyle && (v = new co(h[l].textStyle, a, e.ecModel));
        var m = v.getTextColor() || e.get("axisLine.lineStyle.color"),
        y = i.dataToCoord(l),
        _ = [y, n.labelOffset + n.labelDirection * o],
        x = new Dg({
          anid: "label_" + l,
          position: _,
          rotation: u.rotation,
          silent: f,
          z2: 10
        });
        Wa(x.style, v, {
          text: d,
          textAlign: v.getShallow("align", !0) || u.textAlign,
          textVerticalAlign: v.getShallow("verticalAlign", !0) || v.getShallow("baseline", !0) || u.textVerticalAlign,
          textFill: "function" == typeof m ? m("category" === i.type ? g: "value" === i.type ? l + "": l, s) : m
        }),
        p && (x.eventData = kx(e), x.eventData.targetType = "axisLabel", x.eventData.value = g),
        t._dumbGroup.add(x),
        x.updateTransform(),
        c.push(x),
        t.group.add(x),
        x.decomposeTransform()
      }),
      c
    }
  }
  function Vc(t) {
    var e = Wc(t);
    if (e) {
      var n = e.axisPointerModel,
      i = e.axis.scale,
      r = n.option,
      a = n.get("status"),
      o = n.get("value");
      null != o && (o = i.parse(o));
      var s = Xc(n);
      null == a && (r.status = s ? "show": "hide");
      var l = i.getExtent().slice();
      l[0] > l[1] && l.reverse(),
      (null == o || o > l[1]) && (o = l[1]),
      o < l[0] && (o = l[0]),
      r.value = o,
      s && (r.status = e.axis.scale.isBlank() ? "hide": "show")
    }
  }
  function Wc(t) {
    var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo;
    return e && e.axesInfo[qc(t)]
  }
  function Gc(t) {
    var e = Wc(t);
    return e && e.axisPointerModel
  }
  function Xc(t) {
    return !! t.get("handle.show")
  }
  function qc(t) {
    return t.type + "||" + t.id
  }
  function Uc(t, e, n, i, r, a) {
    var o = Ax.getAxisPointerClass(t.axisPointerClass);
    if (o) {
      var s = Gc(e);
      s ? (t._axisPointer || (t._axisPointer = new o)).render(e, s, i, a) : Yc(t, i)
    }
  }
  function Yc(t, e, n) {
    var i = t._axisPointer;
    i && i.dispose(e, n),
    t._axisPointer = null
  }
  function jc(t, e, n) {
    n = n || {};
    var i = t.coordinateSystem,
    r = e.axis,
    a = {},
    o = r.getAxesOnZeroOf()[0],
    s = r.position,
    l = o ? "onZero": s,
    u = r.dim,
    h = i.getRect(),
    c = [h.x, h.x + h.width, h.y, h.y + h.height],
    f = {
      left: 0,
      right: 1,
      top: 0,
      bottom: 1,
      onZero: 2
    },
    d = e.get("offset") || 0,
    p = "x" === u ? [c[2] - d, c[3] + d] : [c[0] - d, c[1] + d];
    if (o) {
      var g = o.toGlobalCoord(o.dataToCoord(0));
      p[f.onZero] = Math.max(Math.min(g, p[1]), p[0])
    }
    a.position = ["y" === u ? p[f[l]] : c[0], "x" === u ? p[f[l]] : c[3]],
    a.rotation = Math.PI / 2 * ("x" === u ? 0 : 1);
    var v = {
      top: -1,
      bottom: 1,
      left: -1,
      right: 1
    };
    a.labelDirection = a.tickDirection = a.nameDirection = v[s],
    a.labelOffset = o ? p[f[s]] - p[f.onZero] : 0,
    e.get("axisTick.inside") && (a.tickDirection = -a.tickDirection),
    I(n.labelInside, e.get("axisLabel.inside")) && (a.labelDirection = -a.labelDirection);
    var m = e.get("axisLabel.rotate");
    return a.labelRotate = "top" === l ? -m: m,
    a.z2 = 1,
    a
  }
  function Zc(t, e, n, i) {
    var r = n.axis;
    if (!r.scale.isBlank()) {
      var a = n.getModel("splitArea"),
      o = a.getModel("areaStyle"),
      l = o.get("color"),
      u = i.coordinateSystem.getRect(),
      h = r.getTicksCoords({
        tickModel: a,
        clamp: !0
      });
      if (h.length) {
        var c = l.length,
        f = t.__splitAreaColors,
        d = F(),
        p = 0;
        if (f) for (var g = 0; g < h.length; g++) {
          var v = f.get(h[g].tickValue);
          if (null != v) {
            p = (v + (c - 1) * g) % c;
            break
          }
        }
        var m = r.toGlobalCoord(h[0].coord),
        y = o.getAreaStyle();
        l = x(l) ? l: [l];
        for (var g = 1; g < h.length; g++) {
          var _, w, b, M, S = r.toGlobalCoord(h[g].coord);
          r.isHorizontal() ? (_ = m, w = u.y, b = S - _, M = u.height, m = _ + b) : (_ = u.x, w = m, b = u.width, M = S - w, m = w + M);
          var T = h[g - 1].tickValue;
          null != T && d.set(T, p),
          e.add(new Vg({
            anid: null != T ? "area_" + T: null,
            shape: {
              x: _,
              y: w,
              width: b,
              height: M
            },
            style: s({
              fill: l[p]
            },
            y),
            silent: !0
          })),
          p = (p + 1) % c
        }
        t.__splitAreaColors = d
      }
    }
  }
  function $c(t) {
    t.__splitAreaColors = null
  }
  var Qc = 2311,
  Kc = function() {
    return Qc++
  },
  Jc = {};
  Jc = "object" == typeof wx && "function" == typeof wx.getSystemInfoSync ? {
    browser: {},
    os: {},
    node: !1,
    wxa: !0,
    canvasSupported: !0,
    svgSupported: !1,
    touchEventsSupported: !0,
    domSupported: !1
  }: "undefined" == typeof document && "undefined" != typeof self ? {
    browser: {},
    os: {},
    node: !1,
    worker: !0,
    canvasSupported: !0,
    domSupported: !1
  }: "undefined" == typeof navigator ? {
    browser: {},
    os: {},
    node: !0,
    worker: !1,
    canvasSupported: !0,
    svgSupported: !0,
    domSupported: !1
  }: e(navigator.userAgent);
  var tf = Jc,
  ef = {
    "[object Function]": 1,
    "[object RegExp]": 1,
    "[object Date]": 1,
    "[object Error]": 1,
    "[object CanvasGradient]": 1,
    "[object CanvasPattern]": 1,
    "[object Image]": 1,
    "[object Canvas]": 1
  },
  nf = {
    "[object Int8Array]": 1,
    "[object Uint8Array]": 1,
    "[object Uint8ClampedArray]": 1,
    "[object Int16Array]": 1,
    "[object Uint16Array]": 1,
    "[object Int32Array]": 1,
    "[object Uint32Array]": 1,
    "[object Float32Array]": 1,
    "[object Float64Array]": 1
  },
  rf = Object.prototype.toString,
  af = Array.prototype,
  of = af.forEach,
  sf = af.filter,
  lf = af.slice,
  uf = af.map,
  hf = af.reduce,
  cf = {},
  ff = function() {
    return cf.createCanvas()
  };
  cf.createCanvas = function() {
    return document.createElement("canvas")
  };
  var df, pf = "__ec_primitive__";
  z.prototype = {
    constructor: z,
    get: function(t) {
      return this.data.hasOwnProperty(t) ? this.data[t] : null
    },
    set: function(t, e) {
      return this.data[t] = e
    },
    each: function(t, e) {
      void 0 !== e && (t = y(t, e));
      for (var n in this.data) this.data.hasOwnProperty(n) && t(this.data[n], n)
    },
    removeKey: function(t) {
      delete this.data[t]
    }
  };
  var gf = (Object.freeze || Object)({
    $override: n,
    clone: i,
    merge: r,
    mergeAll: a,
    extend: o,
    defaults: s,
    createCanvas: ff,
    getContext: l,
    indexOf: u,
    inherits: h,
    mixin: c,
    isArrayLike: f,
    each: d,
    map: p,
    reduce: g,
    filter: v,
    find: m,
    bind: y,
    curry: _,
    isArray: x,
    isFunction: w,
    isString: b,
    isObject: M,
    isBuiltInObject: S,
    isTypedArray: T,
    isDom: C,
    eqNaN: k,
    retrieve: I,
    retrieve2: D,
    retrieve3: A,
    slice: L,
    normalizeCssArray: P,
    assert: O,
    trim: E,
    setAsPrimitive: B,
    isPrimitive: R,
    createHashMap: F,
    concatArray: N,
    noop: H
  }),
  vf = "undefined" == typeof Float32Array ? Array: Float32Array,
  mf = j,
  yf = Z,
  _f = ee,
  xf = ne,
  wf = (Object.freeze || Object)({
    create: V,
    copy: W,
    clone: G,
    set: X,
    add: q,
    scaleAndAdd: U,
    sub: Y,
    len: j,
    length: mf,
    lenSquare: Z,
    lengthSquare: yf,
    mul: $,
    div: Q,
    dot: K,
    scale: J,
    normalize: te,
    distance: ee,
    dist: _f,
    distanceSquare: ne,
    distSquare: xf,
    negate: ie,
    lerp: re,
    applyTransform: ae,
    min: oe,
    max: se
  });
  le.prototype = {
    constructor: le,
    _dragStart: function(t) {
      for (var e = t.target; e && !e.draggable;) e = e.parent;
      e && (this._draggingTarget = e, e.dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(ue(e, t), "dragstart", t.event))
    },
    _drag: function(t) {
      var e = this._draggingTarget;
      if (e) {
        var n = t.offsetX,
        i = t.offsetY,
        r = n - this._x,
        a = i - this._y;
        this._x = n,
        this._y = i,
        e.drift(r, a, t),
        this.dispatchToElement(ue(e, t), "drag", t.event);
        var o = this.findHover(n, i, e).target,
        s = this._dropTarget;
        this._dropTarget = o,
        e !== o && (s && o !== s && this.dispatchToElement(ue(s, t), "dragleave", t.event), o && o !== s && this.dispatchToElement(ue(o, t), "dragenter", t.event))
      }
    },
    _dragEnd: function(t) {
      var e = this._draggingTarget;
      e && (e.dragging = !1),
      this.dispatchToElement(ue(e, t), "dragend", t.event),
      this._dropTarget && this.dispatchToElement(ue(this._dropTarget, t), "drop", t.event),
      this._draggingTarget = null,
      this._dropTarget = null
    }
  };
  var bf = Array.prototype.slice,
  Mf = function(t) {
    this._$handlers = {},
    this._$eventProcessor = t
  };
  Mf.prototype = {
    constructor: Mf,
    one: function(t, e, n, i) {
      return ce(this, t, e, n, i, !0)
    },
    on: function(t, e, n, i) {
      return ce(this, t, e, n, i, !1)
    },
    isSilent: function(t) {
      var e = this._$handlers;
      return ! e[t] || !e[t].length
    },
    off: function(t, e) {
      var n = this._$handlers;
      if (!t) return this._$handlers = {},
      this;
      if (e) {
        if (n[t]) {
          for (var i = [], r = 0, a = n[t].length; a > r; r++) n[t][r].h !== e && i.push(n[t][r]);
          n[t] = i
        }
        n[t] && 0 === n[t].length && delete n[t]
      } else delete n[t];
      return this
    },
    trigger: function(t) {
      var e = this._$handlers[t],
      n = this._$eventProcessor;
      if (e) {
        var i = arguments,
        r = i.length;
        r > 3 && (i = bf.call(i, 1));
        for (var a = e.length,
        o = 0; a > o;) {
          var s = e[o];
          if (n && n.filter && null != s.query && !n.filter(t, s.query)) o++;
          else {
            switch (r) {
            case 1:
              s.h.call(s.ctx);
              break;
            case 2:
              s.h.call(s.ctx, i[1]);
              break;
            case 3:
              s.h.call(s.ctx, i[1], i[2]);
              break;
            default:
              s.h.apply(s.ctx, i)
            }
            s.one ? (e.splice(o, 1), a--) : o++
          }
        }
      }
      return n && n.afterTrigger && n.afterTrigger(t),
      this
    },
    triggerWithContext: function(t) {
      var e = this._$handlers[t],
      n = this._$eventProcessor;
      if (e) {
        var i = arguments,
        r = i.length;
        r > 4 && (i = bf.call(i, 1, i.length - 1));
        for (var a = i[i.length - 1], o = e.length, s = 0; o > s;) {
          var l = e[s];
          if (n && n.filter && null != l.query && !n.filter(t, l.query)) s++;
          else {
            switch (r) {
            case 1:
              l.h.call(a);
              break;
            case 2:
              l.h.call(a, i[1]);
              break;
            case 3:
              l.h.call(a, i[1], i[2]);
              break;
            default:
              l.h.apply(a, i)
            }
            l.one ? (e.splice(s, 1), o--) : s++
          }
        }
      }
      return n && n.afterTrigger && n.afterTrigger(t),
      this
    }
  };
  var Sf = Math.log(2),
  Tf = "___zrEVENTSAVED",
  Cf = "undefined" != typeof window && !!window.addEventListener,
  kf = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
  If = [],
  Df = Cf ?
  function(t) {
    t.preventDefault(),
    t.stopPropagation(),
    t.cancelBubble = !0
  }: function(t) {
    t.returnValue = !1,
    t.cancelBubble = !0
  },
  Af = function() {
    this._track = []
  };
  Af.prototype = {
    constructor: Af,
    recognize: function(t, e, n) {
      return this._doTrack(t, e, n),
      this._recognize(t)
    },
    clear: function() {
      return this._track.length = 0,
      this
    },
    _doTrack: function(t, e, n) {
      var i = t.touches;
      if (i) {
        for (var r = {
          points: [],
          touches: [],
          target: e,
          event: t
        },
        a = 0, o = i.length; o > a; a++) {
          var s = i[a],
          l = ye(n, s, {});
          r.points.push([l.zrX, l.zrY]),
          r.touches.push(s)
        }
        this._track.push(r)
      }
    },
    _recognize: function(t) {
      for (var e in Lf) if (Lf.hasOwnProperty(e)) {
        var n = Lf[e](this._track, t);
        if (n) return n
      }
    }
  };
  var Lf = {
    pinch: function(t, e) {
      var n = t.length;
      if (n) {
        var i = (t[n - 1] || {}).points,
        r = (t[n - 2] || {}).points || i;
        if (r && r.length > 1 && i && i.length > 1) {
          var a = Se(i) / Se(r); ! isFinite(a) && (a = 1),
          e.pinchScale = a;
          var o = Te(i);
          return e.pinchX = o[0],
          e.pinchY = o[1],
          {
            type: "pinch",
            target: t[0].target,
            event: e
          }
        }
      }
    }
  },
  Pf = "silent";
  Ie.prototype.dispose = function() {};
  var Of = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
  Ef = function(t, e, n, i) {
    Mf.call(this),
    this.storage = t,
    this.painter = e,
    this.painterRoot = i,
    n = n || new Ie,
    this.proxy = null,
    this._hovered = {},
    this._lastTouchMoment,
    this._lastX,
    this._lastY,
    this._gestureMgr,
    le.call(this),
    this.setHandlerProxy(n)
  };
  Ef.prototype = {
    constructor: Ef,
    setHandlerProxy: function(t) {
      this.proxy && this.proxy.dispose(),
      t && (d(Of,
      function(e) {
        t.on && t.on(e, this[e], this)
      },
      this), t.handler = this),
      this.proxy = t
    },
    mousemove: function(t) {
      var e = t.zrX,
      n = t.zrY,
      i = Ae(this, e, n),
      r = this._hovered,
      a = r.target;
      a && !a.__zr && (r = this.findHover(r.x, r.y), a = r.target);
      var o = this._hovered = i ? {
        x: e,
        y: n
      }: this.findHover(e, n),
      s = o.target,
      l = this.proxy;
      l.setCursor && l.setCursor(s ? s.cursor: "default"),
      a && s !== a && this.dispatchToElement(r, "mouseout", t),
      this.dispatchToElement(o, "mousemove", t),
      s && s !== a && this.dispatchToElement(o, "mouseover", t)
    },
    mouseout: function(t) {
      var e = t.zrEventControl,
      n = t.zrIsToLocalDOM;
      "only_globalout" !== e && this.dispatchToElement(this._hovered, "mouseout", t),
      "no_globalout" !== e && !n && this.trigger("globalout", {
        type: "globalout",
        event: t
      })
    },
    resize: function() {
      this._hovered = {}
    },
    dispatch: function(t, e) {
      var n = this[t];
      n && n.call(this, e)
    },
    dispose: function() {
      this.proxy.dispose(),
      this.storage = this.proxy = this.painter = null
    },
    setCursorStyle: function(t) {
      var e = this.proxy;
      e.setCursor && e.setCursor(t)
    },
    dispatchToElement: function(t, e, n) {
      t = t || {};
      var i = t.target;
      if (!i || !i.silent) {
        for (var r = "on" + e,
        a = Ce(e, t, n); i && (i[r] && (a.cancelBubble = i[r].call(i, a)), i.trigger(e, a), i = i.parent, !a.cancelBubble););
        a.cancelBubble || (this.trigger(e, a), this.painter && this.painter.eachOtherLayer(function(t) {
          "function" == typeof t[r] && t[r].call(t, a),
          t.trigger && t.trigger(e, a)
        }))
      }
    },
    findHover: function(t, e, n) {
      for (var i = this.storage.getDisplayList(), r = {
        x: t,
        y: e
      },
      a = i.length - 1; a >= 0; a--) {
        var o;
        if (i[a] !== n && !i[a].ignore && (o = De(i[a], t, e)) && (!r.topTarget && (r.topTarget = i[a]), o !== Pf)) {
          r.target = i[a];
          break
        }
      }
      return r
    },
    processGesture: function(t, e) {
      this._gestureMgr || (this._gestureMgr = new Af);
      var n = this._gestureMgr;
      "start" === e && n.clear();
      var i = n.recognize(t, this.findHover(t.zrX, t.zrY, null).target, this.proxy.dom);
      if ("end" === e && n.clear(), i) {
        var r = i.type;
        t.gestureEvent = r,
        this.dispatchToElement({
          target: i.target
        },
        r, i.event)
      }
    }
  },
  d(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"],
  function(t) {
    Ef.prototype[t] = function(e) {
      var n, i, r = e.zrX,
      a = e.zrY,
      o = Ae(this, r, a);
      if ("mouseup" === t && o || (n = this.findHover(r, a), i = n.target), "mousedown" === t) this._downEl = i,
      this._downPoint = [e.zrX, e.zrY],
      this._upEl = i;
      else if ("mouseup" === t) this._upEl = i;
      else if ("click" === t) {
        if (this._downEl !== this._upEl || !this._downPoint || _f(this._downPoint, [e.zrX, e.zrY]) > 4) return;
        this._downPoint = null
      }
      this.dispatchToElement(n, t, e)
    }
  }),
  c(Ef, Mf),
  c(Ef, le);
  var Bf = "undefined" == typeof Float32Array ? Array: Float32Array,
  Rf = (Object.freeze || Object)({
    create: Le,
    identity: Pe,
    copy: Oe,
    mul: Ee,
    translate: Be,
    rotate: Re,
    scale: ze,
    invert: Fe,
    clone: Ne
  }),
  zf = Pe,
  Ff = 5e-5,
  Nf = function(t) {
    t = t || {},
    t.position || (this.position = [0, 0]),
    null == t.rotation && (this.rotation = 0),
    t.scale || (this.scale = [1, 1]),
    this.origin = this.origin || null
  },
  Hf = Nf.prototype;
  Hf.transform = null,
  Hf.needLocalTransform = function() {
    return He(this.rotation) || He(this.position[0]) || He(this.position[1]) || He(this.scale[0] - 1) || He(this.scale[1] - 1)
  };
  var Vf = [];
  Hf.updateTransform = function() {
    var t = this.parent,
    e = t && t.transform,
    n = this.needLocalTransform(),
    i = this.transform;
    if (!n && !e) return void(i && zf(i));
    i = i || Le(),
    n ? this.getLocalTransform(i) : zf(i),
    e && (n ? Ee(i, t.transform, i) : Oe(i, t.transform)),
    this.transform = i;
    var r = this.globalScaleRatio;
    if (null != r && 1 !== r) {
      this.getGlobalScale(Vf);
      var a = Vf[0] < 0 ? -1 : 1,
      o = Vf[1] < 0 ? -1 : 1,
      s = ((Vf[0] - a) * r + a) / Vf[0] || 0,
      l = ((Vf[1] - o) * r + o) / Vf[1] || 0;
      i[0] *= s,
      i[1] *= s,
      i[2] *= l,
      i[3] *= l
    }
    this.invTransform = this.invTransform || Le(),
    Fe(this.invTransform, i)
  },
  Hf.getLocalTransform = function(t) {
    return Nf.getLocalTransform(this, t)
  },
  Hf.setTransform = function(t) {
    var e = this.transform,
    n = t.dpr || 1;
    e ? t.setTransform(n * e[0], n * e[1], n * e[2], n * e[3], n * e[4], n * e[5]) : t.setTransform(n, 0, 0, n, 0, 0)
  },
  Hf.restoreTransform = function(t) {
    var e = t.dpr || 1;
    t.setTransform(e, 0, 0, e, 0, 0)
  };
  var Wf = [],
  Gf = Le();
  Hf.setLocalTransform = function(t) {
    if (t) {
      var e = t[0] * t[0] + t[1] * t[1],
      n = t[2] * t[2] + t[3] * t[3],
      i = this.position,
      r = this.scale;
      He(e - 1) && (e = Math.sqrt(e)),
      He(n - 1) && (n = Math.sqrt(n)),
      t[0] < 0 && (e = -e),
      t[3] < 0 && (n = -n),
      i[0] = t[4],
      i[1] = t[5],
      r[0] = e,
      r[1] = n,
      this.rotation = Math.atan2( - t[1] / n, t[0] / e)
    }
  },
  Hf.decomposeTransform = function() {
    if (this.transform) {
      var t = this.parent,
      e = this.transform;
      t && t.transform && (Ee(Wf, t.invTransform, e), e = Wf);
      var n = this.origin;
      n && (n[0] || n[1]) && (Gf[4] = n[0], Gf[5] = n[1], Ee(Wf, e, Gf), Wf[4] -= n[0], Wf[5] -= n[1], e = Wf),
      this.setLocalTransform(e)
    }
  },
  Hf.getGlobalScale = function(t) {
    var e = this.transform;
    return t = t || [],
    e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]), e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1]), t) : (t[0] = 1, t[1] = 1, t)
  },
  Hf.transformCoordToLocal = function(t, e) {
    var n = [t, e],
    i = this.invTransform;
    return i && ae(n, n, i),
    n
  },
  Hf.transformCoordToGlobal = function(t, e) {
    var n = [t, e],
    i = this.transform;
    return i && ae(n, n, i),
    n
  },
  Nf.getLocalTransform = function(t, e) {
    e = e || [],
    zf(e);
    var n = t.origin,
    i = t.scale || [1, 1],
    r = t.rotation || 0,
    a = t.position || [0, 0];
    return n && (e[4] -= n[0], e[5] -= n[1]),
    ze(e, e, i),
    r && Re(e, e, r),
    n && (e[4] += n[0], e[5] += n[1]),
    e[4] += a[0],
    e[5] += a[1],
    e
  };
  var Xf = {
    linear: function(t) {
      return t
    },
    quadraticIn: function(t) {
      return t * t
    },
    quadraticOut: function(t) {
      return t * (2 - t)
    },
    quadraticInOut: function(t) {
      return (t *= 2) < 1 ? .5 * t * t: -.5 * (--t * (t - 2) - 1)
    },
    cubicIn: function(t) {
      return t * t * t
    },
    cubicOut: function(t) {
      return--t * t * t + 1
    },
    cubicInOut: function(t) {
      return (t *= 2) < 1 ? .5 * t * t * t: .5 * ((t -= 2) * t * t + 2)
    },
    quarticIn: function(t) {
      return t * t * t * t
    },
    quarticOut: function(t) {
      return 1 - --t * t * t * t
    },
    quarticInOut: function(t) {
      return (t *= 2) < 1 ? .5 * t * t * t * t: -.5 * ((t -= 2) * t * t * t - 2)
    },
    quinticIn: function(t) {
      return t * t * t * t * t
    },
    quinticOut: function(t) {
      return--t * t * t * t * t + 1
    },
    quinticInOut: function(t) {
      return (t *= 2) < 1 ? .5 * t * t * t * t * t: .5 * ((t -= 2) * t * t * t * t + 2)
    },
    sinusoidalIn: function(t) {
      return 1 - Math.cos(t * Math.PI / 2)
    },
    sinusoidalOut: function(t) {
      return Math.sin(t * Math.PI / 2)
    },
    sinusoidalInOut: function(t) {
      return.5 * (1 - Math.cos(Math.PI * t))
    },
    exponentialIn: function(t) {
      return 0 === t ? 0 : Math.pow(1024, t - 1)
    },
    exponentialOut: function(t) {
      return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
    },
    exponentialInOut: function(t) {
      return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * ( - Math.pow(2, -10 * (t - 1)) + 2)
    },
    circularIn: function(t) {
      return 1 - Math.sqrt(1 - t * t)
    },
    circularOut: function(t) {
      return Math.sqrt(1 - --t * t)
    },
    circularInOut: function(t) {
      return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
    },
    elasticIn: function(t) {
      var e, n = .1,
      i = .4;
      return 0 === t ? 0 : 1 === t ? 1 : (!n || 1 > n ? (n = 1, e = i / 4) : e = i * Math.asin(1 / n) / (2 * Math.PI), -(n * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / i)))
    },
    elasticOut: function(t) {
      var e, n = .1,
      i = .4;
      return 0 === t ? 0 : 1 === t ? 1 : (!n || 1 > n ? (n = 1, e = i / 4) : e = i * Math.asin(1 / n) / (2 * Math.PI), n * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / i) + 1)
    },
    elasticInOut: function(t) {
      var e, n = .1,
      i = .4;
      return 0 === t ? 0 : 1 === t ? 1 : (!n || 1 > n ? (n = 1, e = i / 4) : e = i * Math.asin(1 / n) / (2 * Math.PI), (t *= 2) < 1 ? -.5 * n * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / i) : n * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / i) * .5 + 1)
    },
    backIn: function(t) {
      var e = 1.70158;
      return t * t * ((e + 1) * t - e)
    },
    backOut: function(t) {
      var e = 1.70158;
      return--t * t * ((e + 1) * t + e) + 1
    },
    backInOut: function(t) {
      var e = 2.5949095;
      return (t *= 2) < 1 ? .5 * t * t * ((e + 1) * t - e) : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
    },
    bounceIn: function(t) {
      return 1 - Xf.bounceOut(1 - t)
    },
    bounceOut: function(t) {
      return 1 / 2.75 > t ? 7.5625 * t * t: 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
    },
    bounceInOut: function(t) {
      return.5 > t ? .5 * Xf.bounceIn(2 * t) : .5 * Xf.bounceOut(2 * t - 1) + .5
    }
  };
  Ve.prototype = {
    constructor: Ve,
    step: function(t, e) {
      if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) return void(this._pausedTime += e);
      var n = (t - this._startTime - this._pausedTime) / this._life;
      if (! (0 > n)) {
        n = Math.min(n, 1);
        var i = this.easing,
        r = "string" == typeof i ? Xf[i] : i,
        a = "function" == typeof r ? r(n) : n;
        return this.fire("frame", a),
        1 === n ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0, "destroy") : null
      }
    },
    restart: function(t) {
      var e = (t - this._startTime - this._pausedTime) % this._life;
      this._startTime = t - e + this.gap,
      this._pausedTime = 0,
      this._needsRemove = !1
    },
    fire: function(t, e) {
      t = "on" + t,
      this[t] && this[t](this._target, e)
    },
    pause: function() {
      this._paused = !0
    },
    resume: function() {
      this._paused = !1
    }
  };
  var qf = function() {
    this.head = null,
    this.tail = null,
    this._len = 0
  },
  Uf = qf.prototype;
  Uf.insert = function(t) {
    var e = new Yf(t);
    return this.insertEntry(e),
    e
  },
  Uf.insertEntry = function(t) {
    this.head ? (this.tail.next = t, t.prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t,
    this._len++
  },
  Uf.remove = function(t) {
    var e = t.prev,
    n = t.next;
    e ? e.next = n: this.head = n,
    n ? n.prev = e: this.tail = e,
    t.next = t.prev = null,
    this._len--
  },
  Uf.len = function() {
    return this._len
  },
  Uf.clear = function() {
    this.head = this.tail = null,
    this._len = 0
  };
  var Yf = function(t) {
    this.value = t,
    this.next,
    this.prev
  },
  jf = function(t) {
    this._list = new qf,
    this._map = {},
    this._maxSize = t || 10,
    this._lastRemovedEntry = null
  },
  Zf = jf.prototype;
  Zf.put = function(t, e) {
    var n = this._list,
    i = this._map,
    r = null;
    if (null == i[t]) {
      var a = n.len(),
      o = this._lastRemovedEntry;
      if (a >= this._maxSize && a > 0) {
        var s = n.head;
        n.remove(s),
        delete i[s.key],
        r = s.value,
        this._lastRemovedEntry = s
      }
      o ? o.value = e: o = new Yf(e),
      o.key = t,
      n.insertEntry(o),
      i[t] = o
    }
    return r
  },
  Zf.get = function(t) {
    var e = this._map[t],
    n = this._list;
    return null != e ? (e !== n.tail && (n.remove(e), n.insertEntry(e)), e.value) : void 0
  },
  Zf.clear = function() {
    this._list.clear(),
    this._map = {}
  };
  var $f = {
    transparent: [0, 0, 0, 0],
    aliceblue: [240, 248, 255, 1],
    antiquewhite: [250, 235, 215, 1],
    aqua: [0, 255, 255, 1],
    aquamarine: [127, 255, 212, 1],
    azure: [240, 255, 255, 1],
    beige: [245, 245, 220, 1],
    bisque: [255, 228, 196, 1],
    black: [0, 0, 0, 1],
    blanchedalmond: [255, 235, 205, 1],
    blue: [0, 0, 255, 1],
    blueviolet: [138, 43, 226, 1],
    brown: [165, 42, 42, 1],
    burlywood: [222, 184, 135, 1],
    cadetblue: [95, 158, 160, 1],
    chartreuse: [127, 255, 0, 1],
    chocolate: [210, 105, 30, 1],
    coral: [255, 127, 80, 1],
    cornflowerblue: [100, 149, 237, 1],
    cornsilk: [255, 248, 220, 1],
    crimson: [220, 20, 60, 1],
    cyan: [0, 255, 255, 1],
    darkblue: [0, 0, 139, 1],
    darkcyan: [0, 139, 139, 1],
    darkgoldenrod: [184, 134, 11, 1],
    darkgray: [169, 169, 169, 1],
    darkgreen: [0, 100, 0, 1],
    darkgrey: [169, 169, 169, 1],
    darkkhaki: [189, 183, 107, 1],
    darkmagenta: [139, 0, 139, 1],
    darkolivegreen: [85, 107, 47, 1],
    darkorange: [255, 140, 0, 1],
    darkorchid: [153, 50, 204, 1],
    darkred: [139, 0, 0, 1],
    darksalmon: [233, 150, 122, 1],
    darkseagreen: [143, 188, 143, 1],
    darkslateblue: [72, 61, 139, 1],
    darkslategray: [47, 79, 79, 1],
    darkslategrey: [47, 79, 79, 1],
    darkturquoise: [0, 206, 209, 1],
    darkviolet: [148, 0, 211, 1],
    deeppink: [255, 20, 147, 1],
    deepskyblue: [0, 191, 255, 1],
    dimgray: [105, 105, 105, 1],
    dimgrey: [105, 105, 105, 1],
    dodgerblue: [30, 144, 255, 1],
    firebrick: [178, 34, 34, 1],
    floralwhite: [255, 250, 240, 1],
    forestgreen: [34, 139, 34, 1],
    fuchsia: [255, 0, 255, 1],
    gainsboro: [220, 220, 220, 1],
    ghostwhite: [248, 248, 255, 1],
    gold: [255, 215, 0, 1],
    goldenrod: [218, 165, 32, 1],
    gray: [128, 128, 128, 1],
    green: [0, 128, 0, 1],
    greenyellow: [173, 255, 47, 1],
    grey: [128, 128, 128, 1],
    honeydew: [240, 255, 240, 1],
    hotpink: [255, 105, 180, 1],
    indianred: [205, 92, 92, 1],
    indigo: [75, 0, 130, 1],
    ivory: [255, 255, 240, 1],
    khaki: [240, 230, 140, 1],
    lavender: [230, 230, 250, 1],
    lavenderblush: [255, 240, 245, 1],
    lawngreen: [124, 252, 0, 1],
    lemonchiffon: [255, 250, 205, 1],
    lightblue: [173, 216, 230, 1],
    lightcoral: [240, 128, 128, 1],
    lightcyan: [224, 255, 255, 1],
    lightgoldenrodyellow: [250, 250, 210, 1],
    lightgray: [211, 211, 211, 1],
    lightgreen: [144, 238, 144, 1],
    lightgrey: [211, 211, 211, 1],
    lightpink: [255, 182, 193, 1],
    lightsalmon: [255, 160, 122, 1],
    lightseagreen: [32, 178, 170, 1],
    lightskyblue: [135, 206, 250, 1],
    lightslategray: [119, 136, 153, 1],
    lightslategrey: [119, 136, 153, 1],
    lightsteelblue: [176, 196, 222, 1],
    lightyellow: [255, 255, 224, 1],
    lime: [0, 255, 0, 1],
    limegreen: [50, 205, 50, 1],
    linen: [250, 240, 230, 1],
    magenta: [255, 0, 255, 1],
    maroon: [128, 0, 0, 1],
    mediumaquamarine: [102, 205, 170, 1],
    mediumblue: [0, 0, 205, 1],
    mediumorchid: [186, 85, 211, 1],
    mediumpurple: [147, 112, 219, 1],
    mediumseagreen: [60, 179, 113, 1],
    mediumslateblue: [123, 104, 238, 1],
    mediumspringgreen: [0, 250, 154, 1],
    mediumturquoise: [72, 209, 204, 1],
    mediumvioletred: [199, 21, 133, 1],
    midnightblue: [25, 25, 112, 1],
    mintcream: [245, 255, 250, 1],
    mistyrose: [255, 228, 225, 1],
    moccasin: [255, 228, 181, 1],
    navajowhite: [255, 222, 173, 1],
    navy: [0, 0, 128, 1],
    oldlace: [253, 245, 230, 1],
    olive: [128, 128, 0, 1],
    olivedrab: [107, 142, 35, 1],
    orange: [255, 165, 0, 1],
    orangered: [255, 69, 0, 1],
    orchid: [218, 112, 214, 1],
    palegoldenrod: [238, 232, 170, 1],
    palegreen: [152, 251, 152, 1],
    paleturquoise: [175, 238, 238, 1],
    palevioletred: [219, 112, 147, 1],
    papayawhip: [255, 239, 213, 1],
    peachpuff: [255, 218, 185, 1],
    peru: [205, 133, 63, 1],
    pink: [255, 192, 203, 1],
    plum: [221, 160, 221, 1],
    powderblue: [176, 224, 230, 1],
    purple: [128, 0, 128, 1],
    red: [255, 0, 0, 1],
    rosybrown: [188, 143, 143, 1],
    royalblue: [65, 105, 225, 1],
    saddlebrown: [139, 69, 19, 1],
    salmon: [250, 128, 114, 1],
    sandybrown: [244, 164, 96, 1],
    seagreen: [46, 139, 87, 1],
    seashell: [255, 245, 238, 1],
    sienna: [160, 82, 45, 1],
    silver: [192, 192, 192, 1],
    skyblue: [135, 206, 235, 1],
    slateblue: [106, 90, 205, 1],
    slategray: [112, 128, 144, 1],
    slategrey: [112, 128, 144, 1],
    snow: [255, 250, 250, 1],
    springgreen: [0, 255, 127, 1],
    steelblue: [70, 130, 180, 1],
    tan: [210, 180, 140, 1],
    teal: [0, 128, 128, 1],
    thistle: [216, 191, 216, 1],
    tomato: [255, 99, 71, 1],
    turquoise: [64, 224, 208, 1],
    violet: [238, 130, 238, 1],
    wheat: [245, 222, 179, 1],
    white: [255, 255, 255, 1],
    whitesmoke: [245, 245, 245, 1],
    yellow: [255, 255, 0, 1],
    yellowgreen: [154, 205, 50, 1]
  },
  Qf = new jf(20),
  Kf = null,
  Jf = rn,
  td = an,
  ed = (Object.freeze || Object)({
    parse: Ke,
    lift: en,
    toHex: nn,
    fastLerp: rn,
    fastMapToColor: Jf,
    lerp: an,
    mapToColor: td,
    modifyHSL: on,
    modifyAlpha: sn,
    stringify: ln
  }),
  nd = Array.prototype.slice,
  id = function(t, e, n, i) {
    this._tracks = {},
    this._target = t,
    this._loop = e || !1,
    this._getter = n || un,
    this._setter = i || hn,
    this._clipCount = 0,
    this._delay = 0,
    this._doneList = [],
    this._onframeList = [],
    this._clipList = []
  };
  id.prototype = {
    when: function(t, e) {
      var n = this._tracks;
      for (var i in e) if (e.hasOwnProperty(i)) {
        if (!n[i]) {
          n[i] = [];
          var r = this._getter(this._target, i);
          if (null == r) continue;
          0 !== t && n[i].push({
            time: 0,
            value: yn(r)
          })
        }
        n[i].push({
          time: t,
          value: e[i]
        })
      }
      return this
    },
    during: function(t) {
      return this._onframeList.push(t),
      this
    },
    pause: function() {
      for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause();
      this._paused = !0
    },
    resume: function() {
      for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume();
      this._paused = !1
    },
    isPaused: function() {
      return !! this._paused
    },
    _doneCallback: function() {
      this._tracks = {},
      this._clipList.length = 0;
      for (var t = this._doneList,
      e = t.length,
      n = 0; e > n; n++) t[n].call(this)
    },
    start: function(t, e) {
      var n, i = this,
      r = 0,
      a = function() {
        r--,
        r || i._doneCallback()
      };
      for (var o in this._tracks) if (this._tracks.hasOwnProperty(o)) {
        var s = wn(this, t, a, this._tracks[o], o, e);
        s && (this._clipList.push(s), r++, this.animation && this.animation.addClip(s), n = s)
      }
      if (n) {
        var l = n.onframe;
        n.onframe = function(t, e) {
          l(t, e);
          for (var n = 0; n < i._onframeList.length; n++) i._onframeList[n](t, e)
        }
      }
      return r || this._doneCallback(),
      this
    },
    stop: function(t) {
      for (var e = this._clipList,
      n = this.animation,
      i = 0; i < e.length; i++) {
        var r = e[i];
        t && r.onframe(this._target, 1),
        n && n.removeClip(r)
      }
      e.length = 0
    },
    delay: function(t) {
      return this._delay = t,
      this
    },
    done: function(t) {
      return t && this._doneList.push(t),
      this
    },
    getClips: function() {
      return this._clipList
    }
  };
  var rd = 1;
  "undefined" != typeof window && (rd = Math.max(window.devicePixelRatio || 1, 1));
  var ad = 0,
  od = rd,
  sd = function() {};
  1 === ad && (sd = console.error);
  var ld = sd,
  ud = function() {
    this.animators = []
  };
  ud.prototype = {
    constructor: ud,
    animate: function(t, e) {
      var n, i = !1,
      r = this,
      a = this.__zr;
      if (t) {
        var o = t.split("."),
        s = r;
        i = "shape" === o[0];
        for (var l = 0,
        h = o.length; h > l; l++) s && (s = s[o[l]]);
        s && (n = s)
      } else n = r;
      if (!n) return void ld('Property "' + t + '" is not existed in element ' + r.id);
      var c = r.animators,
      f = new id(n, e);
      return f.during(function() {
        r.dirty(i)
      }).done(function() {
        c.splice(u(c, f), 1)
      }),
      c.push(f),
      a && a.animation.addAnimator(f),
      f
    },
    stopAnimation: function(t) {
      for (var e = this.animators,
      n = e.length,
      i = 0; n > i; i++) e[i].stop(t);
      return e.length = 0,
      this
    },
    animateTo: function(t, e, n, i, r, a) {
      bn(this, t, e, n, i, r, a)
    },
    animateFrom: function(t, e, n, i, r, a) {
      bn(this, t, e, n, i, r, a, !0)
    }
  };
  var hd = function(t) {
    Nf.call(this, t),
    Mf.call(this, t),
    ud.call(this, t),
    this.id = t.id || Kc()
  };
  hd.prototype = {
    type: "element",
    name: "",
    __zr: null,
    ignore: !1,
    clipPath: null,
    isGroup: !1,
    drift: function(t, e) {
      switch (this.draggable) {
      case "horizontal":
        e = 0;
        break;
      case "vertical":
        t = 0
      }
      var n = this.transform;
      n || (n = this.transform = [1, 0, 0, 1, 0, 0]),
      n[4] += t,
      n[5] += e,
      this.decomposeTransform(),
      this.dirty(!1)
    },
    beforeUpdate: function() {},
    afterUpdate: function() {},
    update: function() {
      this.updateTransform()
    },
    traverse: function() {},
    attrKV: function(t, e) {
      if ("position" === t || "scale" === t || "origin" === t) {
        if (e) {
          var n = this[t];
          n || (n = this[t] = []),
          n[0] = e[0],
          n[1] = e[1]
        }
      } else this[t] = e
    },
    hide: function() {
      this.ignore = !0,
      this.__zr && this.__zr.refresh()
    },
    show: function() {
      this.ignore = !1,
      this.__zr && this.__zr.refresh()
    },
    attr: function(t, e) {
      if ("string" == typeof t) this.attrKV(t, e);
      else if (M(t)) for (var n in t) t.hasOwnProperty(n) && this.attrKV(n, t[n]);
      return this.dirty(!1),
      this
    },
    setClipPath: function(t) {
      var e = this.__zr;
      e && t.addSelfToZr(e),
      this.clipPath && this.clipPath !== t && this.removeClipPath(),
      this.clipPath = t,
      t.__zr = e,
      t.__clipTarget = this,
      this.dirty(!1)
    },
    removeClipPath: function() {
      var t = this.clipPath;
      t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(!1))
    },
    addSelfToZr: function(t) {
      this.__zr = t;
      var e = this.animators;
      if (e) for (var n = 0; n < e.length; n++) t.animation.addAnimator(e[n]);
      this.clipPath && this.clipPath.addSelfToZr(t)
    },
    removeSelfFromZr: function(t) {
      this.__zr = null;
      var e = this.animators;
      if (e) for (var n = 0; n < e.length; n++) t.animation.removeAnimator(e[n]);
      this.clipPath && this.clipPath.removeSelfFromZr(t)
    }
  },
  c(hd, ud),
  c(hd, Nf),
  c(hd, Mf);
  var cd = ae,
  fd = Math.min,
  dd = Math.max;
  Tn.prototype = {
    constructor: Tn,
    union: function(t) {
      var e = fd(t.x, this.x),
      n = fd(t.y, this.y);
      this.width = dd(t.x + t.width, this.x + this.width) - e,
      this.height = dd(t.y + t.height, this.y + this.height) - n,
      this.x = e,
      this.y = n
    },
    applyTransform: function() {
      var t = [],
      e = [],
      n = [],
      i = [];
      return function(r) {
        if (r) {
          t[0] = n[0] = this.x,
          t[1] = i[1] = this.y,
          e[0] = i[0] = this.x + this.width,
          e[1] = n[1] = this.y + this.height,
          cd(t, t, r),
          cd(e, e, r),
          cd(n, n, r),
          cd(i, i, r),
          this.x = fd(t[0], e[0], n[0], i[0]),
          this.y = fd(t[1], e[1], n[1], i[1]);
          var a = dd(t[0], e[0], n[0], i[0]),
          o = dd(t[1], e[1], n[1], i[1]);
          this.width = a - this.x,
          this.height = o - this.y
        }
      }
    } (),
    calculateTransform: function(t) {
      var e = this,
      n = t.width / e.width,
      i = t.height / e.height,
      r = Le();
      return Be(r, r, [ - e.x, -e.y]),
      ze(r, r, [n, i]),
      Be(r, r, [t.x, t.y]),
      r
    },
    intersect: function(t) {
      if (!t) return ! 1;
      t instanceof Tn || (t = Tn.create(t));
      var e = this,
      n = e.x,
      i = e.x + e.width,
      r = e.y,
      a = e.y + e.height,
      o = t.x,
      s = t.x + t.width,
      l = t.y,
      u = t.y + t.height;
      return ! (o > i || n > s || l > a || r > u)
    },
    contain: function(t, e) {
      var n = this;
      return t >= n.x && t <= n.x + n.width && e >= n.y && e <= n.y + n.height
    },
    clone: function() {
      return new Tn(this.x, this.y, this.width, this.height)
    },
    copy: function(t) {
      this.x = t.x,
      this.y = t.y,
      this.width = t.width,
      this.height = t.height
    },
    plain: function() {
      return {
        x: this.x,
        y: this.y,
        width: this.width,
        height: this.height
      }
    }
  },
  Tn.create = function(t) {
    return new Tn(t.x, t.y, t.width, t.height)
  };
  var pd = function(t) {
    t = t || {},
    hd.call(this, t);
    for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
    this._children = [],
    this.__storage = null,
    this.__dirty = !0
  };
  pd.prototype = {
    constructor: pd,
    isGroup: !0,
    type: "group",
    silent: !1,
    children: function() {
      return this._children.slice()
    },
    childAt: function(t) {
      return this._children[t]
    },
    childOfName: function(t) {
      for (var e = this._children,
      n = 0; n < e.length; n++) if (e[n].name === t) return e[n]
    },
    childCount: function() {
      return this._children.length
    },
    add: function(t) {
      return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)),
      this
    },
    addBefore: function(t, e) {
      if (t && t !== this && t.parent !== this && e && e.parent === this) {
        var n = this._children,
        i = n.indexOf(e);
        i >= 0 && (n.splice(i, 0, t), this._doAdd(t))
      }
      return this
    },
    _doAdd: function(t) {
      t.parent && t.parent.remove(t),
      t.parent = this;
      var e = this.__storage,
      n = this.__zr;
      e && e !== t.__storage && (e.addToStorage(t), t instanceof pd && t.addChildrenToStorage(e)),
      n && n.refresh()
    },
    remove: function(t) {
      var e = this.__zr,
      n = this.__storage,
      i = this._children,
      r = u(i, t);
      return 0 > r ? this: (i.splice(r, 1), t.parent = null, n && (n.delFromStorage(t), t instanceof pd && t.delChildrenFromStorage(n)), e && e.refresh(), this)
    },
    removeAll: function() {
      var t, e, n = this._children,
      i = this.__storage;
      for (e = 0; e < n.length; e++) t = n[e],
      i && (i.delFromStorage(t), t instanceof pd && t.delChildrenFromStorage(i)),
      t.parent = null;
      return n.length = 0,
      this
    },
    eachChild: function(t, e) {
      for (var n = this._children,
      i = 0; i < n.length; i++) {
        var r = n[i];
        t.call(e, r, i)
      }
      return this
    },
    traverse: function(t, e) {
      for (var n = 0; n < this._children.length; n++) {
        var i = this._children[n];
        t.call(e, i),
        "group" === i.type && i.traverse(t, e)
      }
      return this
    },
    addChildrenToStorage: function(t) {
      for (var e = 0; e < this._children.length; e++) {
        var n = this._children[e];
        t.addToStorage(n),
        n instanceof pd && n.addChildrenToStorage(t)
      }
    },
    delChildrenFromStorage: function(t) {
      for (var e = 0; e < this._children.length; e++) {
        var n = this._children[e];
        t.delFromStorage(n),
        n instanceof pd && n.delChildrenFromStorage(t)
      }
    },
    dirty: function() {
      return this.__dirty = !0,
      this.__zr && this.__zr.refresh(),
      this
    },
    getBoundingRect: function(t) {
      for (var e = null,
      n = new Tn(0, 0, 0, 0), i = t || this._children, r = [], a = 0; a < i.length; a++) {
        var o = i[a];
        if (!o.ignore && !o.invisible) {
          var s = o.getBoundingRect(),
          l = o.getLocalTransform(r);
          l ? (n.copy(s), n.applyTransform(l), e = e || n.clone(), e.union(n)) : (e = e || s.clone(), e.union(s))
        }
      }
      return e || n
    }
  },
  h(pd, hd);
  var gd = 32,
  vd = 7,
  md = function() {
    this._roots = [],
    this._displayList = [],
    this._displayListLen = 0
  };
  md.prototype = {
    constructor: md,
    traverse: function(t, e) {
      for (var n = 0; n < this._roots.length; n++) this._roots[n].traverse(t, e)
    },
    getDisplayList: function(t, e) {
      return e = e || !1,
      t && this.updateDisplayList(e),
      this._displayList
    },
    updateDisplayList: function(t) {
      this._displayListLen = 0;
      for (var e = this._roots,
      n = this._displayList,
      i = 0,
      r = e.length; r > i; i++) this._updateAndAddDisplayable(e[i], null, t);
      n.length = this._displayListLen,
      tf.canvasSupported && On(n, En)
    },
    _updateAndAddDisplayable: function(t, e, n) {
      if (!t.ignore || n) {
        t.beforeUpdate(),
        t.__dirty && t.update(),
        t.afterUpdate();
        var i = t.clipPath;
        if (i) {
          e = e ? e.slice() : [];
          for (var r = i,
          a = t; r;) r.parent = a,
          r.updateTransform(),
          e.push(r),
          a = r,
          r = r.clipPath
        }
        if (t.isGroup) {
          for (var o = t._children,
          s = 0; s < o.length; s++) {
            var l = o[s];
            t.__dirty && (l.__dirty = !0),
            this._updateAndAddDisplayable(l, e, n)
          }
          t.__dirty = !1
        } else t.__clipPaths = e,
        this._displayList[this._displayListLen++] = t
      }
    },
    addRoot: function(t) {
      t.__storage !== this && (t instanceof pd && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(t))
    },
    delRoot: function(t) {
      if (null == t) {
        for (var e = 0; e < this._roots.length; e++) {
          var n = this._roots[e];
          n instanceof pd && n.delChildrenFromStorage(this)
        }
        return this._roots = [],
        this._displayList = [],
        void(this._displayListLen = 0)
      }
      if (t instanceof Array) for (var e = 0,
      i = t.length; i > e; e++) this.delRoot(t[e]);
      else {
        var r = u(this._roots, t);
        r >= 0 && (this.delFromStorage(t), this._roots.splice(r, 1), t instanceof pd && t.delChildrenFromStorage(this))
      }
    },
    addToStorage: function(t) {
      return t && (t.__storage = this, t.dirty(!1)),
      this
    },
    delFromStorage: function(t) {
      return t && (t.__storage = null),
      this
    },
    dispose: function() {
      this._renderList = this._roots = null
    },
    displayableSortFunc: En
  };
  var yd = {
    shadowBlur: 1,
    shadowOffsetX: 1,
    shadowOffsetY: 1,
    textShadowBlur: 1,
    textShadowOffsetX: 1,
    textShadowOffsetY: 1,
    textBoxShadowBlur: 1,
    textBoxShadowOffsetX: 1,
    textBoxShadowOffsetY: 1
  },
  _d = function(t, e, n) {
    return yd.hasOwnProperty(e) ? n *= t.dpr: n
  },
  xd = {
    NONE: 0,
    STYLE_BIND: 1,
    PLAIN_TEXT: 2
  },
  wd = 9,
  bd = [["shadowBlur", 0], ["shadowOffsetX", 0], ["shadowOffsetY", 0], ["shadowColor", "#000"], ["lineCap", "butt"], ["lineJoin", "miter"], ["miterLimit", 10]],
  Md = function(t) {
    this.extendFrom(t, !1)
  };
  Md.prototype = {
    constructor: Md,
    fill: "#000",
    stroke: null,
    opacity: 1,
    fillOpacity: null,
    strokeOpacity: null,
    lineDash: null,
    lineDashOffset: 0,
    shadowBlur: 0,
    shadowOffsetX: 0,
    shadowOffsetY: 0,
    lineWidth: 1,
    strokeNoScale: !1,
    text: null,
    font: null,
    textFont: null,
    fontStyle: null,
    fontWeight: null,
    fontSize: null,
    fontFamily: null,
    textTag: null,
    textFill: "#000",
    textStroke: null,
    textWidth: null,
    textHeight: null,
    textStrokeWidth: 0,
    textLineHeight: null,
    textPosition: "inside",
    textRect: null,
    textOffset: null,
    textAlign: null,
    textVerticalAlign: null,
    textDistance: 5,
    textShadowColor: "transparent",
    textShadowBlur: 0,
    textShadowOffsetX: 0,
    textShadowOffsetY: 0,
    textBoxShadowColor: "transparent",
    textBoxShadowBlur: 0,
    textBoxShadowOffsetX: 0,
    textBoxShadowOffsetY: 0,
    transformText: !1,
    textRotation: 0,
    textOrigin: null,
    textBackgroundColor: null,
    textBorderColor: null,
    textBorderWidth: 0,
    textBorderRadius: 0,
    textPadding: null,
    rich: null,
    truncate: null,
    blend: null,
    bind: function(t, e, n) {
      var i = this,
      r = n && n.style,
      a = !r || t.__attrCachedBy !== xd.STYLE_BIND;
      t.__attrCachedBy = xd.STYLE_BIND;
      for (var o = 0; o < bd.length; o++) {
        var s = bd[o],
        l = s[0]; (a || i[l] !== r[l]) && (t[l] = _d(t, l, i[l] || s[1]))
      }
      if ((a || i.fill !== r.fill) && (t.fillStyle = i.fill), (a || i.stroke !== r.stroke) && (t.strokeStyle = i.stroke), (a || i.opacity !== r.opacity) && (t.globalAlpha = null == i.opacity ? 1 : i.opacity), (a || i.blend !== r.blend) && (t.globalCompositeOperation = i.blend || "source-over"), this.hasStroke()) {
        var u = i.lineWidth;
        t.lineWidth = u / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1)
      }
    },
    hasFill: function() {
      var t = this.fill;
      return null != t && "none" !== t
    },
    hasStroke: function() {
      var t = this.stroke;
      return null != t && "none" !== t && this.lineWidth > 0
    },
    extendFrom: function(t, e) {
      if (t) for (var n in t) ! t.hasOwnProperty(n) || e !== !0 && (e === !1 ? this.hasOwnProperty(n) : null == t[n]) || (this[n] = t[n])
    },
    set: function(t, e) {
      "string" == typeof t ? this[t] = e: this.extendFrom(t, !0)
    },
    clone: function() {
      var t = new this.constructor;
      return t.extendFrom(this, !0),
      t
    },
    getGradient: function(t, e, n) {
      for (var i = "radial" === e.type ? Rn: Bn, r = i(t, e, n), a = e.colorStops, o = 0; o < a.length; o++) r.addColorStop(a[o].offset, a[o].color);
      return r
    }
  };
  for (var Sd = Md.prototype,
  Td = 0; Td < bd.length; Td++) {
    var Cd = bd[Td];
    Cd[0] in Sd || (Sd[Cd[0]] = Cd[1])
  }
  Md.getGradient = Sd.getGradient;
  var kd = function(t, e) {
    this.image = t,
    this.repeat = e,
    this.type = "pattern"
  };
  kd.prototype.getCanvasPattern = function(t) {
    return t.createPattern(this.image, this.repeat || "repeat")
  };
  var Id = function(t, e, n) {
    var i;
    n = n || od,
    "string" == typeof t ? i = Fn(t, e, n) : M(t) && (i = t, t = i.id),
    this.id = t,
    this.dom = i;
    var r = i.style;
    r && (i.onselectstart = zn, r["-webkit-user-select"] = "none", r["user-select"] = "none", r["-webkit-touch-callout"] = "none", r["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", r.padding = 0, r.margin = 0, r["border-width"] = 0),
    this.domBack = null,
    this.ctxBack = null,
    this.painter = e,
    this.config = null,
    this.clearColor = 0,
    this.motionBlur = !1,
    this.lastFrameAlpha = .7,
    this.dpr = n
  };
  Id.prototype = {
    constructor: Id,
    __dirty: !0,
    __used: !1,
    __drawIndex: 0,
    __startIndex: 0,
    __endIndex: 0,
    incremental: !1,
    getElementCount: function() {
      return this.__endIndex - this.__startIndex
    },
    initContext: function() {
      this.ctx = this.dom.getContext("2d"),
      this.ctx.dpr = this.dpr
    },
    createBackBuffer: function() {
      var t = this.dpr;
      this.domBack = Fn("back-" + this.id, this.painter, t),
      this.ctxBack = this.domBack.getContext("2d"),
      1 !== t && this.ctxBack.scale(t, t)
    },
    resize: function(t, e) {
      var n = this.dpr,
      i = this.dom,
      r = i.style,
      a = this.domBack;
      r && (r.width = t + "px", r.height = e + "px"),
      i.width = t * n,
      i.height = e * n,
      a && (a.width = t * n, a.height = e * n, 1 !== n && this.ctxBack.scale(n, n))
    },
    clear: function(t, e) {
      var n = this.dom,
      i = this.ctx,
      r = n.width,
      a = n.height,
      e = e || this.clearColor,
      o = this.motionBlur && !t,
      s = this.lastFrameAlpha,
      l = this.dpr;
      if (o && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(n, 0, 0, r / l, a / l)), i.clearRect(0, 0, r, a), e && "transparent" !== e) {
        var u;
        e.colorStops ? (u = e.__canvasGradient || Md.getGradient(i, e, {
          x: 0,
          y: 0,
          width: r,
          height: a
        }), e.__canvasGradient = u) : e.image && (u = kd.prototype.getCanvasPattern.call(e, i)),
        i.save(),
        i.fillStyle = u || e,
        i.fillRect(0, 0, r, a),
        i.restore()
      }
      if (o) {
        var h = this.domBack;
        i.save(),
        i.globalAlpha = s,
        i.drawImage(h, 0, 0, r, a),
        i.restore()
      }
    }
  };
  var Dd = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) ||
  function(t) {
    setTimeout(t, 16)
  },
  Ad = new jf(50),
  Ld = {},
  Pd = 0,
  Od = 5e3,
  Ed = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g,
  Bd = "12px sans-serif",
  Rd = {};
  Rd.measureText = function(t, e) {
    var n = l();
    return n.font = e || Bd,
    n.measureText(t)
  };
  var zd = Bd,
  Fd = {
    left: 1,
    right: 1,
    center: 1
  },
  Nd = {
    top: 1,
    bottom: 1,
    middle: 1
  },
  Hd = [["textShadowBlur", "shadowBlur", 0], ["textShadowOffsetX", "shadowOffsetX", 0], ["textShadowOffsetY", "shadowOffsetY", 0], ["textShadowColor", "shadowColor", "transparent"]],
  Vd = {},
  Wd = {},
  Gd = new Tn,
  Xd = function() {};
  Xd.prototype = {
    constructor: Xd,
    drawRectText: function(t, e) {
      var n = this.style;
      e = n.textRect || e,
      this.__dirty && si(n, !0);
      var i = n.text;
      if (null != i && (i += ""), Si(i, n)) {
        t.save();
        var r = this.transform;
        n.transformText ? this.setTransform(t) : r && (Gd.copy(e), Gd.applyTransform(r), e = Gd),
        ui(this, t, i, n, e, wd),
        t.restore()
      }
    }
  },
  Ti.prototype = {
    constructor: Ti,
    type: "displayable",
    __dirty: !0,
    invisible: !1,
    z: 0,
    z2: 0,
    zlevel: 0,
    draggable: !1,
    dragging: !1,
    silent: !1,
    culling: !1,
    cursor: "pointer",
    rectHover: !1,
    progressive: !1,
    incremental: !1,
    globalScaleRatio: 1,
    beforeBrush: function() {},
    afterBrush: function() {},
    brush: function() {},
    getBoundingRect: function() {},
    contain: function(t, e) {
      return this.rectContain(t, e)
    },
    traverse: function(t, e) {
      t.call(e, this)
    },
    rectContain: function(t, e) {
      var n = this.transformCoordToLocal(t, e),
      i = this.getBoundingRect();
      return i.contain(n[0], n[1])
    },
    dirty: function() {
      this.__dirty = this.__dirtyText = !0,
      this._rect = null,
      this.__zr && this.__zr.refresh()
    },
    animateStyle: function(t) {
      return this.animate("style", t)
    },
    attrKV: function(t, e) {
      "style" !== t ? hd.prototype.attrKV.call(this, t, e) : this.style.set(e)
    },
    setStyle: function(t, e) {
      return this.style.set(t, e),
      this.dirty(!1),
      this
    },
    useStyle: function(t) {
      return this.style = new Md(t, this),
      this.dirty(!1),
      this
    },
    calculateTextPosition: null
  },
  h(Ti, hd),
  c(Ti, Xd),
  Ci.prototype = {
    constructor: Ci,
    type: "image",
    brush: function(t, e) {
      var n = this.style,
      i = n.image;
      n.bind(t, this, e);
      var r = this._image = Hn(i, this._image, this, this.onload);
      if (r && Wn(r)) {
        var a = n.x || 0,
        o = n.y || 0,
        s = n.width,
        l = n.height,
        u = r.width / r.height;
        if (null == s && null != l ? s = l * u: null == l && null != s ? l = s / u: null == s && null == l && (s = r.width, l = r.height), this.setTransform(t), n.sWidth && n.sHeight) {
          var h = n.sx || 0,
          c = n.sy || 0;
          t.drawImage(r, h, c, n.sWidth, n.sHeight, a, o, s, l)
        } else if (n.sx && n.sy) {
          var h = n.sx,
          c = n.sy,
          f = s - h,
          d = l - c;
          t.drawImage(r, h, c, f, d, a, o, s, l)
        } else t.drawImage(r, a, o, s, l);
        null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
      }
    },
    getBoundingRect: function() {
      var t = this.style;
      return this._rect || (this._rect = new Tn(t.x || 0, t.y || 0, t.width || 0, t.height || 0)),
      this._rect
    }
  },
  h(Ci, Ti);
  var qd = 1e5,
  Ud = 314159,
  Yd = .01,
  jd = .001,
  Zd = new Tn(0, 0, 0, 0),
  $d = new Tn(0, 0, 0, 0),
  Qd = function(t, e, n) {
    this.type = "canvas";
    var i = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
    this._opts = n = o({},
    n || {}),
    this.dpr = n.devicePixelRatio || od,
    this._singleCanvas = i,
    this.root = t;
    var r = t.style;
    r && (r["-webkit-tap-highlight-color"] = "transparent", r["-webkit-user-select"] = r["user-select"] = r["-webkit-touch-callout"] = "none", t.innerHTML = ""),
    this.storage = e;
    var a = this._zlevelList = [],
    s = this._layers = {};
    if (this._layerConfig = {},
    this._needsManuallyCompositing = !1, i) {
      var l = t.width,
      u = t.height;
      null != n.width && (l = n.width),
      null != n.height && (u = n.height),
      this.dpr = n.devicePixelRatio || 1,
      t.width = l * this.dpr,
      t.height = u * this.dpr,
      this._width = l,
      this._height = u;
      var h = new Id(t, this, this.dpr);
      h.__builtin__ = !0,
      h.initContext(),
      s[Ud] = h,
      h.zlevel = Ud,
      a.push(Ud),
      this._domRoot = t
    } else {
      this._width = this._getSize(0),
      this._height = this._getSize(1);
      var c = this._domRoot = Pi(this._width, this._height);
      t.appendChild(c)
    }
    this._hoverlayer = null,
    this._hoverElements = []
  };
  Qd.prototype = {
    constructor: Qd,
    getType: function() {
      return "canvas"
    },
    isSingleCanvas: function() {
      return this._singleCanvas
    },
    getViewportRoot: function() {
      return this._domRoot
    },
    getViewportRootOffset: function() {
      var t = this.getViewportRoot();
      return t ? {
        offsetLeft: t.offsetLeft || 0,
        offsetTop: t.offsetTop || 0
      }: void 0
    },
    refresh: function(t) {
      var e = this.storage.getDisplayList(!0),
      n = this._zlevelList;
      this._redrawId = Math.random(),
      this._paintList(e, t, this._redrawId);
      for (var i = 0; i < n.length; i++) {
        var r = n[i],
        a = this._layers[r];
        if (!a.__builtin__ && a.refresh) {
          var o = 0 === i ? this._backgroundColor: null;
          a.refresh(o)
        }
      }
      return this.refreshHover(),
      this
    },
    addHover: function(t, e) {
      if (!t.__hoverMir) {
        var n = new t.constructor({
          style: t.style,
          shape: t.shape,
          z: t.z,
          z2: t.z2,
          silent: t.silent
        });
        return n.__from = t,
        t.__hoverMir = n,
        e && n.setStyle(e),
        this._hoverElements.push(n),
        n
      }
    },
    removeHover: function(t) {
      var e = t.__hoverMir,
      n = this._hoverElements,
      i = u(n, e);
      i >= 0 && n.splice(i, 1),
      t.__hoverMir = null
    },
    clearHover: function() {
      for (var t = this._hoverElements,
      e = 0; e < t.length; e++) {
        var n = t[e].__from;
        n && (n.__hoverMir = null)
      }
      t.length = 0
    },
    refreshHover: function() {
      var t = this._hoverElements,
      e = t.length,
      n = this._hoverlayer;
      if (n && n.clear(), e) {
        On(t, this.storage.displayableSortFunc),
        n || (n = this._hoverlayer = this.getLayer(qd));
        var i = {};
        n.ctx.save();
        for (var r = 0; e > r;) {
          var a = t[r],
          o = a.__from;
          o && o.__zr ? (r++, o.invisible || (a.transform = o.transform, a.invTransform = o.invTransform, a.__clipPaths = o.__clipPaths, this._doPaintEl(a, n, !0, i))) : (t.splice(r, 1), o.__hoverMir = null, e--)
        }
        n.ctx.restore()
      }
    },
    getHoverLayer: function() {
      return this.getLayer(qd)
    },
    _paintList: function(t, e, n) {
      if (this._redrawId === n) {
        e = e || !1,
        this._updateLayerStatus(t);
        var i = this._doPaintList(t, e);
        if (this._needsManuallyCompositing && this._compositeManually(), !i) {
          var r = this;
          Dd(function() {
            r._paintList(t, e, n)
          })
        }
      }
    },
    _compositeManually: function() {
      var t = this.getLayer(Ud).ctx,
      e = this._domRoot.width,
      n = this._domRoot.height;
      t.clearRect(0, 0, e, n),
      this.eachBuiltinLayer(function(i) {
        i.virtual && t.drawImage(i.dom, 0, 0, e, n)
      })
    },
    _doPaintList: function(t, e) {
      for (var n = [], i = 0; i < this._zlevelList.length; i++) {
        var r = this._zlevelList[i],
        a = this._layers[r];
        a.__builtin__ && a !== this._hoverlayer && (a.__dirty || e) && n.push(a)
      }
      for (var o = !0,
      s = 0; s < n.length; s++) {
        var a = n[s],
        l = a.ctx,
        u = {};
        l.save();
        var h = e ? a.__startIndex: a.__drawIndex,
        c = !e && a.incremental && Date.now,
        f = c && Date.now(),
        p = a.zlevel === this._zlevelList[0] ? this._backgroundColor: null;
        if (a.__startIndex === a.__endIndex) a.clear(!1, p);
        else if (h === a.__startIndex) {
          var g = t[h];
          g.incremental && g.notClear && !e || a.clear(!1, p)
        } - 1 === h && (console.error("For some unknown reason. drawIndex is -1"), h = a.__startIndex);
        for (var v = h; v < a.__endIndex; v++) {
          var m = t[v];
          if (this._doPaintEl(m, a, e, u), m.__dirty = m.__dirtyText = !1, c) {
            var y = Date.now() - f;
            if (y > 15) break
          }
        }
        a.__drawIndex = v,
        a.__drawIndex < a.__endIndex && (o = !1),
        u.prevElClipPaths && l.restore(),
        l.restore()
      }
      return tf.wxa && d(this._layers,
      function(t) {
        t && t.ctx && t.ctx.draw && t.ctx.draw()
      }),
      o
    },
    _doPaintEl: function(t, e, n, i) {
      var r = e.ctx,
      a = t.transform;
      if (! (!e.__dirty && !n || t.invisible || 0 === t.style.opacity || a && !a[0] && !a[3] || t.culling && Di(t, this._width, this._height))) {
        var o = t.__clipPaths,
        s = i.prevElClipPaths; (!s || Ai(o, s)) && (s && (r.restore(), i.prevElClipPaths = null, i.prevEl = null), o && (r.save(), Li(o, r), i.prevElClipPaths = o)),
        t.beforeBrush && t.beforeBrush(r),
        t.brush(r, i.prevEl || null),
        i.prevEl = t,
        t.afterBrush && t.afterBrush(r)
      }
    },
    getLayer: function(t, e) {
      this._singleCanvas && !this._needsManuallyCompositing && (t = Ud);
      var n = this._layers[t];
      return n || (n = new Id("zr_" + t, this, this.dpr), n.zlevel = t, n.__builtin__ = !0, this._layerConfig[t] ? r(n, this._layerConfig[t], !0) : this._layerConfig[t - Yd] && r(n, this._layerConfig[t - Yd], !0), e && (n.virtual = e), this.insertLayer(t, n), n.initContext()),
      n
    },
    insertLayer: function(t, e) {
      var n = this._layers,
      i = this._zlevelList,
      r = i.length,
      a = null,
      o = -1,
      s = this._domRoot;
      if (n[t]) return void ld("ZLevel " + t + " has been used already");
      if (!Ii(e)) return void ld("Layer of zlevel " + t + " is not valid");
      if (r > 0 && t > i[0]) {
        for (o = 0; r - 1 > o && !(i[o] < t && i[o + 1] > t); o++);
        a = n[i[o]]
      }
      if (i.splice(o + 1, 0, t), n[t] = e, !e.virtual) if (a) {
        var l = a.dom;
        l.nextSibling ? s.insertBefore(e.dom, l.nextSibling) : s.appendChild(e.dom)
      } else s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom)
    },
    eachLayer: function(t, e) {
      var n, i, r = this._zlevelList;
      for (i = 0; i < r.length; i++) n = r[i],
      t.call(e, this._layers[n], n)
    },
    eachBuiltinLayer: function(t, e) {
      var n, i, r, a = this._zlevelList;
      for (r = 0; r < a.length; r++) i = a[r],
      n = this._layers[i],
      n.__builtin__ && t.call(e, n, i)
    },
    eachOtherLayer: function(t, e) {
      var n, i, r, a = this._zlevelList;
      for (r = 0; r < a.length; r++) i = a[r],
      n = this._layers[i],
      n.__builtin__ || t.call(e, n, i)
    },
    getLayers: function() {
      return this._layers
    },
    _updateLayerStatus: function(t) {
      function e(t) {
        a && (a.__endIndex !== t && (a.__dirty = !0), a.__endIndex = t)
      }
      if (this.eachBuiltinLayer(function(t) {
        t.__dirty = t.__used = !1
      }), this._singleCanvas) for (var n = 1; n < t.length; n++) {
        var i = t[n];
        if (i.zlevel !== t[n - 1].zlevel || i.incremental) {
          this._needsManuallyCompositing = !0;
          break
        }
      }
      for (var r, a = null,
      o = 0,
      n = 0; n < t.length; n++) {
        var s, i = t[n],
        l = i.zlevel;
        r !== l && (r = l, o = 0),
        i.incremental ? (s = this.getLayer(l + jd, this._needsManuallyCompositing), s.incremental = !0, o = 1) : s = this.getLayer(l + (o > 0 ? Yd: 0), this._needsManuallyCompositing),
        s.__builtin__ || ld("ZLevel " + l + " has been used by unkown layer " + s.id),
        s !== a && (s.__used = !0, s.__startIndex !== n && (s.__dirty = !0), s.__startIndex = n, s.__drawIndex = s.incremental ? -1 : n, e(n), a = s),
        i.__dirty && (s.__dirty = !0, s.incremental && s.__drawIndex < 0 && (s.__drawIndex = n))
      }
      e(n),
      this.eachBuiltinLayer(function(t) { ! t.__used && t.getElementCount() > 0 && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0),
        t.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex)
      })
    },
    clear: function() {
      return this.eachBuiltinLayer(this._clearLayer),
      this
    },
    _clearLayer: function(t) {
      t.clear()
    },
    setBackgroundColor: function(t) {
      this._backgroundColor = t
    },
    configLayer: function(t, e) {
      if (e) {
        var n = this._layerConfig;
        n[t] ? r(n[t], e, !0) : n[t] = e;
        for (var i = 0; i < this._zlevelList.length; i++) {
          var a = this._zlevelList[i];
          if (a === t || a === t + Yd) {
            var o = this._layers[a];
            r(o, n[t], !0)
          }
        }
      }
    },
    delLayer: function(t) {
      var e = this._layers,
      n = this._zlevelList,
      i = e[t];
      i && (i.dom.parentNode.removeChild(i.dom), delete e[t], n.splice(u(n, t), 1))
    },
    resize: function(t, e) {
      if (this._domRoot.style) {
        var n = this._domRoot;
        n.style.display = "none";
        var i = this._opts;
        if (null != t && (i.width = t), null != e && (i.height = e), t = this._getSize(0), e = this._getSize(1), n.style.display = "", this._width !== t || e !== this._height) {
          n.style.width = t + "px",
          n.style.height = e + "px";
          for (var r in this._layers) this._layers.hasOwnProperty(r) && this._layers[r].resize(t, e);
          d(this._progressiveLayers,
          function(n) {
            n.resize(t, e)
          }),
          this.refresh(!0)
        }
        this._width = t,
        this._height = e
      } else {
        if (null == t || null == e) return;
        this._width = t,
        this._height = e,
        this.getLayer(Ud).resize(t, e)
      }
      return this
    },
    clearLayer: function(t) {
      var e = this._layers[t];
      e && e.clear()
    },
    dispose: function() {
      this.root.innerHTML = "",
      this.root = this.storage = this._domRoot = this._layers = null
    },
    getRenderedCanvas: function(t) {
      if (t = t || {},
      this._singleCanvas && !this._compositeManually) return this._layers[Ud].dom;
      var e = new Id("image", this, t.pixelRatio || this.dpr);
      if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) {
        this.refresh();
        var n = e.dom.width,
        i = e.dom.height,
        r = e.ctx;
        this.eachLayer(function(t) {
          t.__builtin__ ? r.drawImage(t.dom, 0, 0, n, i) : t.renderToCanvas && (e.ctx.save(), t.renderToCanvas(e.ctx), e.ctx.restore())
        })
      } else for (var a = {},
      o = this.storage.getDisplayList(!0), s = 0; s < o.length; s++) {
        var l = o[s];
        this._doPaintEl(l, e, !0, a)
      }
      return e.dom
    },
    getWidth: function() {
      return this._width
    },
    getHeight: function() {
      return this._height
    },
    _getSize: function(t) {
      var e = this._opts,
      n = ["width", "height"][t],
      i = ["clientWidth", "clientHeight"][t],
      r = ["paddingLeft", "paddingTop"][t],
      a = ["paddingRight", "paddingBottom"][t];
      if (null != e[n] && "auto" !== e[n]) return parseFloat(e[n]);
      var o = this.root,
      s = document.defaultView.getComputedStyle(o);
      return (o[i] || ki(s[n]) || ki(o.style[n])) - (ki(s[r]) || 0) - (ki(s[a]) || 0) | 0
    },
    pathToImage: function(t, e) {
      e = e || this.dpr;
      var n = document.createElement("canvas"),
      i = n.getContext("2d"),
      r = t.getBoundingRect(),
      a = t.style,
      o = a.shadowBlur * e,
      s = a.shadowOffsetX * e,
      l = a.shadowOffsetY * e,
      u = a.hasStroke() ? a.lineWidth: 0,
      h = Math.max(u / 2, -s + o),
      c = Math.max(u / 2, s + o),
      f = Math.max(u / 2, -l + o),
      d = Math.max(u / 2, l + o),
      p = r.width + h + c,
      g = r.height + f + d;
      n.width = p * e,
      n.height = g * e,
      i.scale(e, e),
      i.clearRect(0, 0, p, g),
      i.dpr = e;
      var v = {
        position: t.position,
        rotation: t.rotation,
        scale: t.scale
      };
      t.position = [h - r.x, f - r.y],
      t.rotation = 0,
      t.scale = [1, 1],
      t.updateTransform(),
      t && t.brush(i);
      var m = Ci,
      y = new m({
        style: {
          x: 0,
          y: 0,
          image: n
        }
      });
      return null != v.position && (y.position = t.position = v.position),
      null != v.rotation && (y.rotation = t.rotation = v.rotation),
      null != v.scale && (y.scale = t.scale = v.scale),
      y
    }
  };
  var Kd = function(t) {
    t = t || {},
    this.stage = t.stage || {},
    this.onframe = t.onframe ||
    function() {},
    this._clips = [],
    this._running = !1,
    this._time,
    this._pausedTime,
    this._pauseStart,
    this._paused = !1,
    Mf.call(this)
  };
  Kd.prototype = {
    constructor: Kd,
    addClip: function(t) {
      this._clips.push(t)
    },
    addAnimator: function(t) {
      t.animation = this;
      for (var e = t.getClips(), n = 0; n < e.length; n++) this.addClip(e[n])
    },
    removeClip: function(t) {
      var e = u(this._clips, t);
      e >= 0 && this._clips.splice(e, 1)
    },
    removeAnimator: function(t) {
      for (var e = t.getClips(), n = 0; n < e.length; n++) this.removeClip(e[n]);
      t.animation = null
    },
    _update: function() {
      for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, n = this._clips, i = n.length, r = [], a = [], o = 0; i > o; o++) {
        var s = n[o],
        l = s.step(t, e);
        l && (r.push(l), a.push(s))
      }
      for (var o = 0; i > o;) n[o]._needsRemove ? (n[o] = n[i - 1], n.pop(), i--) : o++;
      i = r.length;
      for (var o = 0; i > o; o++) a[o].fire(r[o]);
      this._time = t,
      this.onframe(e),
      this.trigger("frame", e),
      this.stage.update && this.stage.update()
    },
    _startLoop: function() {
      function t() {
        e._running && (Dd(t), !e._paused && e._update())
      }
      var e = this;
      this._running = !0,
      Dd(t)
    },
    start: function() {
      this._time = (new Date).getTime(),
      this._pausedTime = 0,
      this._startLoop()
    },
    stop: function() {
      this._running = !1
    },
    pause: function() {
      this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0)
    },
    resume: function() {
      this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1)
    },
    clear: function() {
      this._clips = []
    },
    isFinished: function() {
      return ! this._clips.length
    },
    animate: function(t, e) {
      e = e || {};
      var n = new id(t, e.loop, e.getter, e.setter);
      return this.addAnimator(n),
      n
    }
  },
  c(Kd, Mf);
  var Jd = 300,
  tp = tf.domSupported,
  ep = function() {
    var t = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
    e = ["touchstart", "touchend", "touchmove"],
    n = {
      pointerdown: 1,
      pointerup: 1,
      pointermove: 1,
      pointerout: 1
    },
    i = p(t,
    function(t) {
      var e = t.replace("mouse", "pointer");
      return n.hasOwnProperty(e) ? e: t
    });
    return {
      mouse: t,
      touch: e,
      pointer: i
    }
  } (),
  np = {
    mouse: ["mousemove", "mouseup"],
    pointer: ["pointermove", "pointerup"]
  },
  ip = Ni.prototype;
  ip.stopPropagation = ip.stopImmediatePropagation = ip.preventDefault = H;
  var rp = {
    mousedown: function(t) {
      t = we(this.dom, t),
      this._mayPointerCapture = [t.zrX, t.zrY],
      this.trigger("mousedown", t)
    },
    mousemove: function(t) {
      t = we(this.dom, t);
      var e = this._mayPointerCapture; ! e || t.zrX === e[0] && t.zrY === e[1] || Xi(this, !0),
      this.trigger("mousemove", t)
    },
    mouseup: function(t) {
      t = we(this.dom, t),
      Xi(this, !1),
      this.trigger("mouseup", t)
    },
    mouseout: function(t) {
      t = we(this.dom, t),
      this._pointerCapturing && (t.zrEventControl = "no_globalout");
      var e = t.toElement || t.relatedTarget;
      t.zrIsToLocalDOM = Fi(this, e),
      this.trigger("mouseout", t)
    },
    touchstart: function(t) {
      t = we(this.dom, t),
      Ri(t),
      this._lastTouchMoment = new Date,
      this.handler.processGesture(t, "start"),
      rp.mousemove.call(this, t),
      rp.mousedown.call(this, t)
    },
    touchmove: function(t) {
      t = we(this.dom, t),
      Ri(t),
      this.handler.processGesture(t, "change"),
      rp.mousemove.call(this, t)
    },
    touchend: function(t) {
      t = we(this.dom, t),
      Ri(t),
      this.handler.processGesture(t, "end"),
      rp.mouseup.call(this, t),
      +new Date - this._lastTouchMoment < Jd && rp.click.call(this, t)
    },
    pointerdown: function(t) {
      rp.mousedown.call(this, t)
    },
    pointermove: function(t) {
      Ei(t) || rp.mousemove.call(this, t)
    },
    pointerup: function(t) {
      rp.mouseup.call(this, t)
    },
    pointerout: function(t) {
      Ei(t) || rp.mouseout.call(this, t)
    }
  };
  d(["click", "mousewheel", "dblclick", "contextmenu"],
  function(t) {
    rp[t] = function(e) {
      e = we(this.dom, e),
      this.trigger(t, e)
    }
  });
  var ap = {
    pointermove: function(t) {
      Ei(t) || ap.mousemove.call(this, t)
    },
    pointerup: function(t) {
      ap.mouseup.call(this, t)
    },
    mousemove: function(t) {
      this.trigger("mousemove", t)
    },
    mouseup: function(t) {
      var e = this._pointerCapturing;
      Xi(this, !1),
      this.trigger("mouseup", t),
      e && (t.zrEventControl = "only_globalout", this.trigger("mouseout", t))
    }
  },
  op = Ui.prototype;
  op.dispose = function() {
    Gi(this._localHandlerScope),
    tp && Gi(this._globalHandlerScope)
  },
  op.setCursor = function(t) {
    this.dom.style && (this.dom.style.cursor = t || "default")
  },
  c(Ui, Mf);
  var sp = !tf.canvasSupported,
  lp = {
    canvas: Qd
  },
  up = {},
  hp = "4.3.1",
  cp = function(t, e, n) {
    n = n || {},
    this.dom = e,
    this.id = t;
    var i = this,
    r = new md,
    a = n.renderer;
    if (sp) {
      if (!lp.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8");
      a = "vml"
    } else a && lp[a] || (a = "canvas");
    var o = new lp[a](e, r, n, t);
    this.storage = r,
    this.painter = o;
    var s = tf.node || tf.worker ? null: new Ui(o.getViewportRoot(), o.root);
    this.handler = new Ef(r, o, s, o.root),
    this.animation = new Kd({
      stage: {
        update: y(this.flush, this)
      }
    }),
    this.animation.start(),
    this._needsRefresh;
    var l = r.delFromStorage,
    u = r.addToStorage;
    r.delFromStorage = function(t) {
      l.call(r, t),
      t && t.removeSelfFromZr(i)
    },
    r.addToStorage = function(t) {
      u.call(r, t),
      t.addSelfToZr(i)
    }
  };
  cp.prototype = {
    constructor: cp,
    getId: function() {
      return this.id
    },
    add: function(t) {
      this.storage.addRoot(t),
      this._needsRefresh = !0
    },
    remove: function(t) {
      this.storage.delRoot(t),
      this._needsRefresh = !0
    },
    configLayer: function(t, e) {
      this.painter.configLayer && this.painter.configLayer(t, e),
      this._needsRefresh = !0
    },
    setBackgroundColor: function(t) {
      this.painter.setBackgroundColor && this.painter.setBackgroundColor(t),
      this._needsRefresh = !0
    },
    refreshImmediately: function() {
      this._needsRefresh = this._needsRefreshHover = !1,
      this.painter.refresh(),
      this._needsRefresh = this._needsRefreshHover = !1
    },
    refresh: function() {
      this._needsRefresh = !0
    },
    flush: function() {
      var t;
      this._needsRefresh && (t = !0, this.refreshImmediately()),
      this._needsRefreshHover && (t = !0, this.refreshHoverImmediately()),
      t && this.trigger("rendered")
    },
    addHover: function(t, e) {
      if (this.painter.addHover) {
        var n = this.painter.addHover(t, e);
        return this.refreshHover(),
        n
      }
    },
    removeHover: function(t) {
      this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover())
    },
    clearHover: function() {
      this.painter.clearHover && (this.painter.clearHover(), this.refreshHover())
    },
    refreshHover: function() {
      this._needsRefreshHover = !0
    },
    refreshHoverImmediately: function() {
      this._needsRefreshHover = !1,
      this.painter.refreshHover && this.painter.refreshHover()
    },
    resize: function(t) {
      t = t || {},
      this.painter.resize(t.width, t.height),
      this.handler.resize()
    },
    clearAnimation: function() {
      this.animation.clear()
    },
    getWidth: function() {
      return this.painter.getWidth()
    },
    getHeight: function() {
      return this.painter.getHeight()
    },
    pathToImage: function(t, e) {
      return this.painter.pathToImage(t, e)
    },
    setCursorStyle: function(t) {
      this.handler.setCursorStyle(t)
    },
    findHover: function(t, e) {
      return this.handler.findHover(t, e)
    },
    on: function(t, e, n) {
      this.handler.on(t, e, n)
    },
    off: function(t, e) {
      this.handler.off(t, e)
    },
    trigger: function(t, e) {
      this.handler.trigger(t, e)
    },
    clear: function() {
      this.storage.delRoot(),
      this.painter.clear()
    },
    dispose: function() {
      this.animation.stop(),
      this.clear(),
      this.storage.dispose(),
      this.painter.dispose(),
      this.handler.dispose(),
      this.animation = this.storage = this.painter = this.handler = null,
      Qi(this.id)
    }
  };
  var fp = (Object.freeze || Object)({
    version: hp,
    init: Yi,
    dispose: ji,
    getInstance: Zi,
    registerPainter: $i
  }),
  dp = d,
  pp = M,
  gp = x,
  vp = "series\x00",
  mp = ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"],
  yp = 0,
  _p = ".",
  xp = "___EC__COMPONENT__CONTAINER___",
  wp = 0,
  bp = function(t) {
    for (var e = 0; e < t.length; e++) t[e][1] || (t[e][1] = t[e][0]);
    return function(e, n, i) {
      for (var r = {},
      a = 0; a < t.length; a++) {
        var o = t[a][1];
        if (! (n && u(n, o) >= 0 || i && u(i, o) < 0)) {
          var s = e.getShallow(o);
          null != s && (r[t[a][0]] = s)
        }
      }
      return r
    }
  },
  Mp = bp([["lineWidth", "width"], ["stroke", "color"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]),
  Sp = {
    getLineStyle: function(t) {
      var e = Mp(this, t);
      return e.lineDash = this.getLineDash(e.lineWidth),
      e
    },
    getLineDash: function(t) {
      null == t && (t = 1);
      var e = this.get("type"),
      n = Math.max(t, 2),
      i = 4 * t;
      return "solid" === e || null == e ? !1 : "dashed" === e ? [i, i] : [n, n]
    }
  },
  Tp = bp([["fill", "color"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["opacity"], ["shadowColor"]]),
  Cp = {
    getAreaStyle: function(t, e) {
      return Tp(this, t, e)
    }
  },
  kp = Math.pow,
  Ip = Math.sqrt,
  Dp = 1e-8,
  Ap = 1e-4,
  Lp = Ip(3),
  Pp = 1 / 3,
  Op = V(),
  Ep = V(),
  Bp = V(),
  Rp = Math.min,
  zp = Math.max,
  Fp = Math.sin,
  Np = Math.cos,
  Hp = 2 * Math.PI,
  Vp = V(),
  Wp = V(),
  Gp = V(),
  Xp = [],
  qp = [],
  Up = {
    M: 1,
    L: 2,
    C: 3,
    Q: 4,
    A: 5,
    Z: 6,
    R: 7
  },
  Yp = [],
  jp = [],
  Zp = [],
  $p = [],
  Qp = Math.min,
  Kp = Math.max,
  Jp = Math.cos,
  tg = Math.sin,
  eg = Math.sqrt,
  ng = Math.abs,
  ig = "undefined" != typeof Float32Array,
  rg = function(t) {
    this._saveData = !t,
    this._saveData && (this.data = []),
    this._ctx = null
  };
  rg.prototype = {
    constructor: rg,
    _xi: 0,
    _yi: 0,
    _x0: 0,
    _y0: 0,
    _ux: 0,
    _uy: 0,
    _len: 0,
    _lineDash: null,
    _dashOffset: 0,
    _dashIdx: 0,
    _dashSum: 0,
    setScale: function(t, e, n) {
      n = n || 0,
      this._ux = ng(n / od / t) || 0,
      this._uy = ng(n / od / e) || 0
    },
    getContext: function() {
      return this._ctx
    },
    beginPath: function(t) {
      return this._ctx = t,
      t && t.beginPath(),
      t && (this.dpr = t.dpr),
      this._saveData && (this._len = 0),
      this._lineDash && (this._lineDash = null, this._dashOffset = 0),
      this
    },
    moveTo: function(t, e) {
      return this.addData(Up.M, t, e),
      this._ctx && this._ctx.moveTo(t, e),
      this._x0 = t,
      this._y0 = e,
      this._xi = t,
      this._yi = e,
      this
    },
    lineTo: function(t, e) {
      var n = ng(t - this._xi) > this._ux || ng(e - this._yi) > this._uy || this._len < 5;
      return this.addData(Up.L, t, e),
      this._ctx && n && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)),
      n && (this._xi = t, this._yi = e),
      this
    },
    bezierCurveTo: function(t, e, n, i, r, a) {
      return this.addData(Up.C, t, e, n, i, r, a),
      this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, n, i, r, a) : this._ctx.bezierCurveTo(t, e, n, i, r, a)),
      this._xi = r,
      this._yi = a,
      this
    },
    quadraticCurveTo: function(t, e, n, i) {
      return this.addData(Up.Q, t, e, n, i),
      this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, n, i) : this._ctx.quadraticCurveTo(t, e, n, i)),
      this._xi = n,
      this._yi = i,
      this
    },
    arc: function(t, e, n, i, r, a) {
      return this.addData(Up.A, t, e, n, n, i, r - i, 0, a ? 0 : 1),
      this._ctx && this._ctx.arc(t, e, n, i, r, a),
      this._xi = Jp(r) * n + t,
      this._yi = tg(r) * n + e,
      this
    },
    arcTo: function(t, e, n, i, r) {
      return this._ctx && this._ctx.arcTo(t, e, n, i, r),
      this
    },
    rect: function(t, e, n, i) {
      return this._ctx && this._ctx.rect(t, e, n, i),
      this.addData(Up.R, t, e, n, i),
      this
    },
    closePath: function() {
      this.addData(Up.Z);
      var t = this._ctx,
      e = this._x0,
      n = this._y0;
      return t && (this._needsDash() && this._dashedLineTo(e, n), t.closePath()),
      this._xi = e,
      this._yi = n,
      this
    },
    fill: function(t) {
      t && t.fill(),
      this.toStatic()
    },
    stroke: function(t) {
      t && t.stroke(),
      this.toStatic()
    },
    setLineDash: function(t) {
      if (t instanceof Array) {
        this._lineDash = t,
        this._dashIdx = 0;
        for (var e = 0,
        n = 0; n < t.length; n++) e += t[n];
        this._dashSum = e
      }
      return this
    },
    setLineDashOffset: function(t) {
      return this._dashOffset = t,
      this
    },
    len: function() {
      return this._len
    },
    setData: function(t) {
      var e = t.length;
      this.data && this.data.length === e || !ig || (this.data = new Float32Array(e));
      for (var n = 0; e > n; n++) this.data[n] = t[n];
      this._len = e
    },
    appendPath: function(t) {
      t instanceof Array || (t = [t]);
      for (var e = t.length,
      n = 0,
      i = this._len,
      r = 0; e > r; r++) n += t[r].len();
      ig && this.data instanceof Float32Array && (this.data = new Float32Array(i + n));
      for (var r = 0; e > r; r++) for (var a = t[r].data, o = 0; o < a.length; o++) this.data[i++] = a[o];
      this._len = i
    },
    addData: function(t) {
      if (this._saveData) {
        var e = this.data;
        this._len + arguments.length > e.length && (this._expandData(), e = this.data);
        for (var n = 0; n < arguments.length; n++) e[this._len++] = arguments[n];
        this._prevCmd = t
      }
    },
    _expandData: function() {
      if (! (this.data instanceof Array)) {
        for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e];
        this.data = t
      }
    },
    _needsDash: function() {
      return this._lineDash
    },
    _dashedLineTo: function(t, e) {
      var n, i, r = this._dashSum,
      a = this._dashOffset,
      o = this._lineDash,
      s = this._ctx,
      l = this._xi,
      u = this._yi,
      h = t - l,
      c = e - u,
      f = eg(h * h + c * c),
      d = l,
      p = u,
      g = o.length;
      for (h /= f, c /= f, 0 > a && (a = r + a), a %= r, d -= a * h, p -= a * c; h > 0 && t >= d || 0 > h && d >= t || 0 === h && (c > 0 && e >= p || 0 > c && p >= e);) i = this._dashIdx,
      n = o[i],
      d += h * n,
      p += c * n,
      this._dashIdx = (i + 1) % g,
      h > 0 && l > d || 0 > h && d > l || c > 0 && u > p || 0 > c && p > u || s[i % 2 ? "moveTo": "lineTo"](h >= 0 ? Qp(d, t) : Kp(d, t), c >= 0 ? Qp(p, e) : Kp(p, e));
      h = d - t,
      c = p - e,
      this._dashOffset = -eg(h * h + c * c)
    },
    _dashedBezierTo: function(t, e, n, i, r, a) {
      var o, s, l, u, h, c = this._dashSum,
      f = this._dashOffset,
      d = this._lineDash,
      p = this._ctx,
      g = this._xi,
      v = this._yi,
      m = br,
      y = 0,
      _ = this._dashIdx,
      x = d.length,
      w = 0;
      for (0 > f && (f = c + f), f %= c, o = 0; 1 > o; o += .1) s = m(g, t, n, r, o + .1) - m(g, t, n, r, o),
      l = m(v, e, i, a, o + .1) - m(v, e, i, a, o),
      y += eg(s * s + l * l);
      for (; x > _ && (w += d[_], !(w > f)); _++);
      for (o = (w - f) / y; 1 >= o;) u = m(g, t, n, r, o),
      h = m(v, e, i, a, o),
      _ % 2 ? p.moveTo(u, h) : p.lineTo(u, h),
      o += d[_] / y,
      _ = (_ + 1) % x;
      _ % 2 !== 0 && p.lineTo(r, a),
      s = r - u,
      l = a - h,
      this._dashOffset = -eg(s * s + l * l)
    },
    _dashedQuadraticTo: function(t, e, n, i) {
      var r = n,
      a = i;
      n = (n + 2 * t) / 3,
      i = (i + 2 * e) / 3,
      t = (this._xi + 2 * t) / 3,
      e = (this._yi + 2 * e) / 3,
      this._dashedBezierTo(t, e, n, i, r, a)
    },
    toStatic: function() {
      var t = this.data;
      t instanceof Array && (t.length = this._len, ig && (this.data = new Float32Array(t)))
    },
    getBoundingRect: function() {
      Yp[0] = Yp[1] = Zp[0] = Zp[1] = Number.MAX_VALUE,
      jp[0] = jp[1] = $p[0] = $p[1] = -Number.MAX_VALUE;
      for (var t = this.data,
      e = 0,
      n = 0,
      i = 0,
      r = 0,
      a = 0; a < t.length;) {
        var o = t[a++];
        switch (1 === a && (e = t[a], n = t[a + 1], i = e, r = n), o) {
        case Up.M:
          i = t[a++],
          r = t[a++],
          e = i,
          n = r,
          Zp[0] = i,
          Zp[1] = r,
          $p[0] = i,
          $p[1] = r;
          break;
        case Up.L:
          Br(e, n, t[a], t[a + 1], Zp, $p),
          e = t[a++],
          n = t[a++];
          break;
        case Up.C:
          Rr(e, n, t[a++], t[a++], t[a++], t[a++], t[a], t[a + 1], Zp, $p),
          e = t[a++],
          n = t[a++];
          break;
        case Up.Q:
          zr(e, n, t[a++], t[a++], t[a], t[a + 1], Zp, $p),
          e = t[a++],
          n = t[a++];
          break;
        case Up.A:
          var s = t[a++],
          l = t[a++],
          u = t[a++],
          h = t[a++],
          c = t[a++],
          f = t[a++] + c;
          a += 1;
          var d = 1 - t[a++];
          1 === a && (i = Jp(c) * u + s, r = tg(c) * h + l),
          Fr(s, l, u, h, c, f, d, Zp, $p),
          e = Jp(f) * u + s,
          n = tg(f) * h + l;
          break;
        case Up.R:
          i = e = t[a++],
          r = n = t[a++];
          var p = t[a++],
          g = t[a++];
          Br(i, r, i + p, r + g, Zp, $p);
          break;
        case Up.Z:
          e = i,
          n = r
        }
        oe(Yp, Yp, Zp),
        se(jp, jp, $p)
      }
      return 0 === a && (Yp[0] = Yp[1] = jp[0] = jp[1] = 0),
      new Tn(Yp[0], Yp[1], jp[0] - Yp[0], jp[1] - Yp[1])
    },
    rebuildPath: function(t) {
      for (var e, n, i, r, a, o, s = this.data,
      l = this._ux,
      u = this._uy,
      h = this._len,
      c = 0; h > c;) {
        var f = s[c++];
        switch (1 === c && (i = s[c], r = s[c + 1], e = i, n = r), f) {
        case Up.M:
          e = i = s[c++],
          n = r = s[c++],
          t.moveTo(i, r);
          break;
        case Up.L:
          a = s[c++],
          o = s[c++],
          (ng(a - i) > l || ng(o - r) > u || c === h - 1) && (t.lineTo(a, o), i = a, r = o);
          break;
        case Up.C:
          t.bezierCurveTo(s[c++], s[c++], s[c++], s[c++], s[c++], s[c++]),
          i = s[c - 2],
          r = s[c - 1];
          break;
        case Up.Q:
          t.quadraticCurveTo(s[c++], s[c++], s[c++], s[c++]),
          i = s[c - 2],
          r = s[c - 1];
          break;
        case Up.A:
          var d = s[c++],
          p = s[c++],
          g = s[c++],
          v = s[c++],
          m = s[c++],
          y = s[c++],
          _ = s[c++],
          x = s[c++],
          w = g > v ? g: v,
          b = g > v ? 1 : g / v,
          M = g > v ? v / g: 1,
          S = Math.abs(g - v) > .001,
          T = m + y;
          S ? (t.translate(d, p), t.rotate(_), t.scale(b, M), t.arc(0, 0, w, m, T, 1 - x), t.scale(1 / b, 1 / M), t.rotate( - _), t.translate( - d, -p)) : t.arc(d, p, w, m, T, 1 - x),
          1 === c && (e = Jp(m) * g + d, n = tg(m) * v + p),
          i = Jp(T) * g + d,
          r = tg(T) * v + p;
          break;
        case Up.R:
          e = i = s[c],
          n = r = s[c + 1],
          t.rect(s[c++], s[c++], s[c++], s[c++]);
          break;
        case Up.Z:
          t.closePath(),
          i = e,
          r = n
        }
      }
    }
  },
  rg.CMD = Up;
  var ag = 2 * Math.PI,
  og = 2 * Math.PI,
  sg = rg.CMD,
  lg = 2 * Math.PI,
  ug = 1e-4,
  hg = [ - 1, -1, -1],
  cg = [ - 1, -1],
  fg = kd.prototype.getCanvasPattern,
  dg = Math.abs,
  pg = new rg(!0);
  Jr.prototype = {
    constructor: Jr,
    type: "path",
    __dirtyPath: !0,
    strokeContainThreshold: 5,
    segmentIgnoreThreshold: 0,
    subPixelOptimize: !1,
    brush: function(t, e) {
      var n = this.style,
      i = this.path || pg,
      r = n.hasStroke(),
      a = n.hasFill(),
      o = n.fill,
      s = n.stroke,
      l = a && !!o.colorStops,
      u = r && !!s.colorStops,
      h = a && !!o.image,
      c = r && !!s.image;
      if (n.bind(t, this, e), this.setTransform(t), this.__dirty) {
        var f;
        l && (f = f || this.getBoundingRect(), this._fillGradient = n.getGradient(t, o, f)),
        u && (f = f || this.getBoundingRect(), this._strokeGradient = n.getGradient(t, s, f))
      }
      l ? t.fillStyle = this._fillGradient: h && (t.fillStyle = fg.call(o, t)),
      u ? t.strokeStyle = this._strokeGradient: c && (t.strokeStyle = fg.call(s, t));
      var d = n.lineDash,
      p = n.lineDashOffset,
      g = !!t.setLineDash,
      v = this.getGlobalScale();
      if (i.setScale(v[0], v[1], this.segmentIgnoreThreshold), this.__dirtyPath || d && !g && r ? (i.beginPath(t), d && !g && (i.setLineDash(d), i.setLineDashOffset(p)), this.buildPath(i, this.shape, !1), this.path && (this.__dirtyPath = !1)) : (t.beginPath(), this.path.rebuildPath(t)), a) if (null != n.fillOpacity) {
        var m = t.globalAlpha;
        t.globalAlpha = n.fillOpacity * n.opacity,
        i.fill(t),
        t.globalAlpha = m
      } else i.fill(t);
      if (d && g && (t.setLineDash(d), t.lineDashOffset = p), r) if (null != n.strokeOpacity) {
        var m = t.globalAlpha;
        t.globalAlpha = n.strokeOpacity * n.opacity,
        i.stroke(t),
        t.globalAlpha = m
      } else i.stroke(t);
      d && g && t.setLineDash([]),
      null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect()))
    },
    buildPath: function() {},
    createPathProxy: function() {
      this.path = new rg
    },
    getBoundingRect: function() {
      var t = this._rect,
      e = this.style,
      n = !t;
      if (n) {
        var i = this.path;
        i || (i = this.path = new rg),
        this.__dirtyPath && (i.beginPath(), this.buildPath(i, this.shape, !1)),
        t = i.getBoundingRect()
      }
      if (this._rect = t, e.hasStroke()) {
        var r = this._rectWithStroke || (this._rectWithStroke = t.clone());
        if (this.__dirty || n) {
          r.copy(t);
          var a = e.lineWidth,
          o = e.strokeNoScale ? this.getLineScale() : 1;
          e.hasFill() || (a = Math.max(a, this.strokeContainThreshold || 4)),
          o > 1e-10 && (r.width += a / o, r.height += a / o, r.x -= a / o / 2, r.y -= a / o / 2)
        }
        return r
      }
      return t
    },
    contain: function(t, e) {
      var n = this.transformCoordToLocal(t, e),
      i = this.getBoundingRect(),
      r = this.style;
      if (t = n[0], e = n[1], i.contain(t, e)) {
        var a = this.path.data;
        if (r.hasStroke()) {
          var o = r.lineWidth,
          s = r.strokeNoScale ? this.getLineScale() : 1;
          if (s > 1e-10 && (r.hasFill() || (o = Math.max(o, this.strokeContainThreshold)), Kr(a, o / s, t, e))) return ! 0
        }
        if (r.hasFill()) return Qr(a, t, e)
      }
      return ! 1
    },
    dirty: function(t) {
      null == t && (t = !0),
      t && (this.__dirtyPath = t, this._rect = null),
      this.__dirty = this.__dirtyText = !0,
      this.__zr && this.__zr.refresh(),
      this.__clipTarget && this.__clipTarget.dirty()
    },
    animateShape: function(t) {
      return this.animate("shape", t)
    },
    attrKV: function(t, e) {
      "shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : Ti.prototype.attrKV.call(this, t, e)
    },
    setShape: function(t, e) {
      var n = this.shape;
      if (n) {
        if (M(t)) for (var i in t) t.hasOwnProperty(i) && (n[i] = t[i]);
        else n[t] = e;
        this.dirty(!0)
      }
      return this
    },
    getLineScale: function() {
      var t = this.transform;
      return t && dg(t[0] - 1) > 1e-10 && dg(t[3] - 1) > 1e-10 ? Math.sqrt(dg(t[0] * t[3] - t[2] * t[1])) : 1
    }
  },
  Jr.extend = function(t) {
    var e = function(e) {
      Jr.call(this, e),
      t.style && this.style.extendFrom(t.style, !1);
      var n = t.shape;
      if (n) {
        this.shape = this.shape || {};
        var i = this.shape;
        for (var r in n) ! i.hasOwnProperty(r) && n.hasOwnProperty(r) && (i[r] = n[r])
      }
      t.init && t.init.call(this, e)
    };
    h(e, Jr);
    for (var n in t)"style" !== n && "shape" !== n && (e.prototype[n] = t[n]);
    return e
  },
  h(Jr, Ti);
  var gg = rg.CMD,
  vg = [[], [], []],
  mg = Math.sqrt,
  yg = Math.atan2,
  _g = function(t, e) {
    var n, i, r, a, o, s, l = t.data,
    u = gg.M,
    h = gg.C,
    c = gg.L,
    f = gg.R,
    d = gg.A,
    p = gg.Q;
    for (r = 0, a = 0; r < l.length;) {
      switch (n = l[r++], a = r, i = 0, n) {
      case u:
        i = 1;
        break;
      case c:
        i = 1;
        break;
      case h:
        i = 3;
        break;
      case p:
        i = 2;
        break;
      case d:
        var g = e[4],
        v = e[5],
        m = mg(e[0] * e[0] + e[1] * e[1]),
        y = mg(e[2] * e[2] + e[3] * e[3]),
        _ = yg( - e[1] / y, e[0] / m);
        l[r] *= m,
        l[r++] += g,
        l[r] *= y,
        l[r++] += v,
        l[r++] *= m,
        l[r++] *= y,
        l[r++] += _,
        l[r++] += _,
        r += 2,
        a = r;
        break;
      case f:
        s[0] = l[r++],
        s[1] = l[r++],
        ae(s, s, e),
        l[a++] = s[0],
        l[a++] = s[1],
        s[0] += l[r++],
        s[1] += l[r++],
        ae(s, s, e),
        l[a++] = s[0],
        l[a++] = s[1]
      }
      for (o = 0; i > o; o++) {
        var s = vg[o];
        s[0] = l[r++],
        s[1] = l[r++],
        ae(s, s, e),
        l[a++] = s[0],
        l[a++] = s[1]
      }
    }
  },
  xg = Math.sqrt,
  wg = Math.sin,
  bg = Math.cos,
  Mg = Math.PI,
  Sg = function(t) {
    return Math.sqrt(t[0] * t[0] + t[1] * t[1])
  },
  Tg = function(t, e) {
    return (t[0] * e[0] + t[1] * e[1]) / (Sg(t) * Sg(e))
  },
  Cg = function(t, e) {
    return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(Tg(t, e))
  },
  kg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,
  Ig = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g,
  Dg = function(t) {
    Ti.call(this, t)
  };
  Dg.prototype = {
    constructor: Dg,
    type: "text",
    brush: function(t, e) {
      var n = this.style;
      this.__dirty && si(n, !0),
      n.fill = n.stroke = n.shadowBlur = n.shadowColor = n.shadowOffsetX = n.shadowOffsetY = null;
      var i = n.text;
      return null != i && (i += ""),
      Si(i, n) ? (this.setTransform(t), ui(this, t, i, n, null, e), void this.restoreTransform(t)) : void(t.__attrCachedBy = xd.NONE)
    },
    getBoundingRect: function() {
      var t = this.style;
      if (this.__dirty && si(t, !0), !this._rect) {
        var e = t.text;
        null != e ? e += "": e = "";
        var n = Xn(t.text + "", t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.textLineHeight, t.rich);
        if (n.x += t.x || 0, n.y += t.y || 0, xi(t.textStroke, t.textStrokeWidth)) {
          var i = t.textStrokeWidth;
          n.x -= i / 2,
          n.y -= i / 2,
          n.width += i,
          n.height += i
        }
        this._rect = n
      }
      return this._rect
    }
  },
  h(Dg, Ti);
  var Ag = Jr.extend({
    type: "circle",
    shape: {
      cx: 0,
      cy: 0,
      r: 0
    },
    buildPath: function(t, e, n) {
      n && t.moveTo(e.cx + e.r, e.cy),
      t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0)
    }
  }),
  Lg = [["shadowBlur", 0], ["shadowColor", "#000"], ["shadowOffsetX", 0], ["shadowOffsetY", 0]],
  Pg = function(t) {
    return tf.browser.ie && tf.browser.version >= 11 ?
    function() {
      var e, n = this.__clipPaths,
      i = this.style;
      if (n) for (var r = 0; r < n.length; r++) {
        var a = n[r],
        o = a && a.shape,
        s = a && a.type;
        if (o && ("sector" === s && o.startAngle === o.endAngle || "rect" === s && (!o.width || !o.height))) {
          for (var l = 0; l < Lg.length; l++) Lg[l][2] = i[Lg[l][0]],
          i[Lg[l][0]] = Lg[l][1];
          e = !0;
          break
        }
      }
      if (t.apply(this, arguments), e) for (var l = 0; l < Lg.length; l++) i[Lg[l][0]] = Lg[l][2]
    }: t
  },
  Og = Jr.extend({
    type: "sector",
    shape: {
      cx: 0,
      cy: 0,
      r0: 0,
      r: 0,
      startAngle: 0,
      endAngle: 2 * Math.PI,
      clockwise: !0
    },
    brush: Pg(Jr.prototype.brush),
    buildPath: function(t, e) {
      var n = e.cx,
      i = e.cy,
      r = Math.max(e.r0 || 0, 0),
      a = Math.max(e.r, 0),
      o = e.startAngle,
      s = e.endAngle,
      l = e.clockwise,
      u = Math.cos(o),
      h = Math.sin(o);
      t.moveTo(u * r + n, h * r + i),
      t.lineTo(u * a + n, h * a + i),
      t.arc(n, i, a, o, s, !l),
      t.lineTo(Math.cos(s) * r + n, Math.sin(s) * r + i),
      0 !== r && t.arc(n, i, r, s, o, l),
      t.closePath()
    }
  }),
  Eg = Jr.extend({
    type: "ring",
    shape: {
      cx: 0,
      cy: 0,
      r: 0,
      r0: 0
    },
    buildPath: function(t, e) {
      var n = e.cx,
      i = e.cy,
      r = 2 * Math.PI;
      t.moveTo(n + e.r, i),
      t.arc(n, i, e.r, 0, r, !1),
      t.moveTo(n + e.r0, i),
      t.arc(n, i, e.r0, 0, r, !0)
    }
  }),
  Bg = function(t, e) {
    for (var n = t.length,
    i = [], r = 0, a = 1; n > a; a++) r += ee(t[a - 1], t[a]);
    var o = r / 2;
    o = n > o ? n: o;
    for (var a = 0; o > a; a++) {
      var s, l, u, h = a / (o - 1) * (e ? n: n - 1),
      c = Math.floor(h),
      f = h - c,
      d = t[c % n];
      e ? (s = t[(c - 1 + n) % n], l = t[(c + 1) % n], u = t[(c + 2) % n]) : (s = t[0 === c ? c: c - 1], l = t[c > n - 2 ? n - 1 : c + 1], u = t[c > n - 3 ? n - 1 : c + 2]);
      var p = f * f,
      g = f * p;
      i.push([oa(s[0], d[0], l[0], u[0], f, p, g), oa(s[1], d[1], l[1], u[1], f, p, g)])
    }
    return i
  },
  Rg = function(t, e, n, i) {
    var r, a, o, s, l = [],
    u = [],
    h = [],
    c = [];
    if (i) {
      o = [1 / 0, 1 / 0],
      s = [ - 1 / 0, -1 / 0];
      for (var f = 0,
      d = t.length; d > f; f++) oe(o, o, t[f]),
      se(s, s, t[f]);
      oe(o, o, i[0]),
      se(s, s, i[1])
    }
    for (var f = 0,
    d = t.length; d > f; f++) {
      var p = t[f];
      if (n) r = t[f ? f - 1 : d - 1],
      a = t[(f + 1) % d];
      else {
        if (0 === f || f === d - 1) {
          l.push(G(t[f]));
          continue
        }
        r = t[f - 1],
        a = t[f + 1]
      }
      Y(u, a, r),
      J(u, u, e);
      var g = ee(p, r),
      v = ee(p, a),
      m = g + v;
      0 !== m && (g /= m, v /= m),
      J(h, u, -g),
      J(c, u, v);
      var y = q([], p, h),
      _ = q([], p, c);
      i && (se(y, y, o), oe(y, y, s), se(_, _, o), oe(_, _, s)),
      l.push(y),
      l.push(_)
    }
    return n && l.push(l.shift()),
    l
  },
  zg = Jr.extend({
    type: "polygon",
    shape: {
      points: null,
      smooth: !1,
      smoothConstraint: null
    },
    buildPath: function(t, e) {
      sa(t, e, !0)
    }
  }),
  Fg = Jr.extend({
    type: "polyline",
    shape: {
      points: null,
      smooth: !1,
      smoothConstraint: null
    },
    style: {
      stroke: "#000",
      fill: null
    },
    buildPath: function(t, e) {
      sa(t, e, !1)
    }
  }),
  Ng = Math.round,
  Hg = {},
  Vg = Jr.extend({
    type: "rect",
    shape: {
      r: 0,
      x: 0,
      y: 0,
      width: 0,
      height: 0
    },
    buildPath: function(t, e) {
      var n, i, r, a;
      this.subPixelOptimize ? (ua(Hg, e, this.style), n = Hg.x, i = Hg.y, r = Hg.width, a = Hg.height, Hg.r = e.r, e = Hg) : (n = e.x, i = e.y, r = e.width, a = e.height),
      e.r ? oi(t, e) : t.rect(n, i, r, a),
      t.closePath()
    }
  }),
  Wg = {},
  Gg = Jr.extend({
    type: "line",
    shape: {
      x1: 0,
      y1: 0,
      x2: 0,
      y2: 0,
      percent: 1
    },
    style: {
      stroke: "#000",
      fill: null
    },
    buildPath: function(t, e) {
      var n, i, r, a;
      this.subPixelOptimize ? (la(Wg, e, this.style), n = Wg.x1, i = Wg.y1, r = Wg.x2, a = Wg.y2) : (n = e.x1, i = e.y1, r = e.x2, a = e.y2);
      var o = e.percent;
      0 !== o && (t.moveTo(n, i), 1 > o && (r = n * (1 - o) + r * o, a = i * (1 - o) + a * o), t.lineTo(r, a))
    },
    pointAt: function(t) {
      var e = this.shape;
      return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t]
    }
  }),
  Xg = [],
  qg = Jr.extend({
    type: "bezier-curve",
    shape: {
      x1: 0,
      y1: 0,
      x2: 0,
      y2: 0,
      cpx1: 0,
      cpy1: 0,
      percent: 1
    },
    style: {
      stroke: "#000",
      fill: null
    },
    buildPath: function(t, e) {
      var n = e.x1,
      i = e.y1,
      r = e.x2,
      a = e.y2,
      o = e.cpx1,
      s = e.cpy1,
      l = e.cpx2,
      u = e.cpy2,
      h = e.percent;
      0 !== h && (t.moveTo(n, i), null == l || null == u ? (1 > h && (Pr(n, o, r, h, Xg), o = Xg[1], r = Xg[2], Pr(i, s, a, h, Xg), s = Xg[1], a = Xg[2]), t.quadraticCurveTo(o, s, r, a)) : (1 > h && (Cr(n, o, l, r, h, Xg), o = Xg[1], l = Xg[2], r = Xg[3], Cr(i, s, u, a, h, Xg), s = Xg[1], u = Xg[2], a = Xg[3]), t.bezierCurveTo(o, s, l, u, r, a)))
    },
    pointAt: function(t) {
      return ca(this.shape, t, !1)
    },
    tangentAt: function(t) {
      var e = ca(this.shape, t, !0);
      return te(e, e)
    }
  }),
  Ug = Jr.extend({
    type: "arc",
    shape: {
      cx: 0,
      cy: 0,
      r: 0,
      startAngle: 0,
      endAngle: 2 * Math.PI,
      clockwise: !0
    },
    style: {
      stroke: "#000",
      fill: null
    },
    buildPath: function(t, e) {
      var n = e.cx,
      i = e.cy,
      r = Math.max(e.r, 0),
      a = e.startAngle,
      o = e.endAngle,
      s = e.clockwise,
      l = Math.cos(a),
      u = Math.sin(a);
      t.moveTo(l * r + n, u * r + i),
      t.arc(n, i, r, a, o, !s)
    }
  }),
  Yg = Jr.extend({
    type: "compound",
    shape: {
      paths: null
    },
    _updatePathDirty: function() {
      for (var t = this.__dirtyPath,
      e = this.shape.paths,
      n = 0; n < e.length; n++) t = t || e[n].__dirtyPath;
      this.__dirtyPath = t,
      this.__dirty = this.__dirty || t
    },
    beforeBrush: function() {
      this._updatePathDirty();
      for (var t = this.shape.paths || [], e = this.getGlobalScale(), n = 0; n < t.length; n++) t[n].path || t[n].createPathProxy(),
      t[n].path.setScale(e[0], e[1], t[n].segmentIgnoreThreshold)
    },
    buildPath: function(t, e) {
      for (var n = e.paths || [], i = 0; i < n.length; i++) n[i].buildPath(t, n[i].shape, !0)
    },
    afterBrush: function() {
      for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1
    },
    getBoundingRect: function() {
      return this._updatePathDirty(),
      Jr.prototype.getBoundingRect.call(this)
    }
  }),
  jg = function(t) {
    this.colorStops = t || []
  };
  jg.prototype = {
    constructor: jg,
    addColorStop: function(t, e) {
      this.colorStops.push({
        offset: t,
        color: e
      })
    }
  };
  var Zg = function(t, e, n, i, r, a) {
    this.x = null == t ? 0 : t,
    this.y = null == e ? 0 : e,
    this.x2 = null == n ? 1 : n,
    this.y2 = null == i ? 0 : i,
    this.type = "linear",
    this.global = a || !1,
    jg.call(this, r)
  };
  Zg.prototype = {
    constructor: Zg
  },
  h(Zg, jg);
  var $g = function(t, e, n, i, r) {
    this.x = null == t ? .5 : t,
    this.y = null == e ? .5 : e,
    this.r = null == n ? .5 : n,
    this.type = "radial",
    this.global = r || !1,
    jg.call(this, i)
  };
  $g.prototype = {
    constructor: $g
  },
  h($g, jg),
  fa.prototype.incremental = !0,
  fa.prototype.clearDisplaybles = function() {
    this._displayables = [],
    this._temporaryDisplayables = [],
    this._cursor = 0,
    this.dirty(),
    this.notClear = !1
  },
  fa.prototype.addDisplayable = function(t, e) {
    e ? this._temporaryDisplayables.push(t) : this._displayables.push(t),
    this.dirty()
  },
  fa.prototype.addDisplayables = function(t, e) {
    e = e || !1;
    for (var n = 0; n < t.length; n++) this.addDisplayable(t[n], e)
  },
  fa.prototype.eachPendingDisplayable = function(t) {
    for (var e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]);
    for (var e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e])
  },
  fa.prototype.update = function() {
    this.updateTransform();
    for (var t = this._cursor; t < this._displayables.length; t++) {
      var e = this._displayables[t];
      e.parent = this,
      e.update(),
      e.parent = null
    }
    for (var t = 0; t < this._temporaryDisplayables.length; t++) {
      var e = this._temporaryDisplayables[t];
      e.parent = this,
      e.update(),
      e.parent = null
    }
  },
  fa.prototype.brush = function(t) {
    for (var e = this._cursor; e < this._displayables.length; e++) {
      var n = this._displayables[e];
      n.beforeBrush && n.beforeBrush(t),
      n.brush(t, e === this._cursor ? null: this._displayables[e - 1]),
      n.afterBrush && n.afterBrush(t)
    }
    this._cursor = e;
    for (var e = 0; e < this._temporaryDisplayables.length; e++) {
      var n = this._temporaryDisplayables[e];
      n.beforeBrush && n.beforeBrush(t),
      n.brush(t, 0 === e ? null: this._temporaryDisplayables[e - 1]),
      n.afterBrush && n.afterBrush(t)
    }
    this._temporaryDisplayables = [],
    this.notClear = !0
  };
  var Qg = [];
  fa.prototype.getBoundingRect = function() {
    if (!this._rect) {
      for (var t = new Tn(1 / 0, 1 / 0, -1 / 0, -1 / 0), e = 0; e < this._displayables.length; e++) {
        var n = this._displayables[e],
        i = n.getBoundingRect().clone();
        n.needLocalTransform() && i.applyTransform(n.getLocalTransform(Qg)),
        t.union(i)
      }
      this._rect = t
    }
    return this._rect
  },
  fa.prototype.contain = function(t, e) {
    var n = this.transformCoordToLocal(t, e),
    i = this.getBoundingRect();
    if (i.contain(n[0], n[1])) for (var r = 0; r < this._displayables.length; r++) {
      var a = this._displayables[r];
      if (a.contain(t, e)) return ! 0
    }
    return ! 1
  },
  h(fa, Ti);
  var Kg = Math.max,
  Jg = Math.min,
  tv = {},
  ev = 1,
  nv = {
    color: "textFill",
    textBorderColor: "textStroke",
    textBorderWidth: "textStrokeWidth"
  },
  iv = "emphasis",
  rv = "normal",
  av = 1,
  ov = {},
  sv = {},
  lv = aa,
  uv = ha,
  hv = F(),
  cv = 0;
  ga("circle", Ag),
  ga("sector", Og),
  ga("ring", Eg),
  ga("polygon", zg),
  ga("polyline", Fg),
  ga("rect", Vg),
  ga("line", Gg),
  ga("bezierCurve", qg),
  ga("arc", Ug);
  var fv = (Object.freeze || Object)({
    Z2_EMPHASIS_LIFT: ev,
    CACHED_LABEL_STYLE_PROPERTIES: nv,
    extendShape: da,
    extendPath: pa,
    registerShape: ga,
    getShapeClass: va,
    makePath: ma,
    makeImage: ya,
    mergePath: lv,
    resizePath: xa,
    subPixelOptimizeLine: wa,
    subPixelOptimizeRect: ba,
    subPixelOptimize: uv,
    setElementHoverStyle: Aa,
    setHoverStyle: Ra,
    setAsHighDownDispatcher: za,
    isHighDownDispatcher: Fa,
    getHighlightDigit: Na,
    setLabelStyle: Ha,
    modifyLabelStyle: Va,
    setTextStyle: Wa,
    setText: Ga,
    getFont: $a,
    updateProps: Ka,
    initProps: Ja,
    getTransform: to,
    applyTransform: eo,
    transformDirection: no,
    groupTransition: io,
    clipPointsByRect: ro,
    clipRectByRect: ao,
    createIcon: oo,
    linePolygonIntersect: so,
    lineLineIntersect: lo,
    Group: pd,
    Image: Ci,
    Text: Dg,
    Circle: Ag,
    Sector: Og,
    Ring: Eg,
    Polygon: zg,
    Polyline: Fg,
    Rect: Vg,
    Line: Gg,
    BezierCurve: qg,
    Arc: Ug,
    IncrementalDisplayable: fa,
    CompoundPath: Yg,
    LinearGradient: Zg,
    RadialGradient: $g,
    BoundingRect: Tn
  }),
  dv = ["textStyle", "color"],
  pv = {
    getTextColor: function(t) {
      var e = this.ecModel;
      return this.getShallow("color") || (!t && e ? e.get(dv) : null)
    },
    getFont: function() {
      return $a({
        fontStyle: this.getShallow("fontStyle"),
        fontWeight: this.getShallow("fontWeight"),
        fontSize: this.getShallow("fontSize"),
        fontFamily: this.getShallow("fontFamily")
      },
      this.ecModel)
    },
    getTextRect: function(t) {
      return Xn(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow("baseline"), this.getShallow("padding"), this.getShallow("lineHeight"), this.getShallow("rich"), this.getShallow("truncateText"))
    }
  },
  gv = bp([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"], ["textPosition"], ["textAlign"]]),
  vv = {
    getItemStyle: function(t, e) {
      var n = gv(this, t, e),
      i = this.getBorderLineDash();
      return i && (n.lineDash = i),
      n
    },
    getBorderLineDash: function() {
      var t = this.get("borderType");
      return "solid" === t || null == t ? null: "dashed" === t ? [5, 5] : [1, 1]
    }
  },
  mv = c,
  yv = sr();
  co.prototype = {
    constructor: co,
    init: null,
    mergeOption: function(t) {
      r(this.option, t, !0)
    },
    get: function(t, e) {
      return null == t ? this.option: fo(this.option, this.parsePath(t), !e && po(this, t))
    },
    getShallow: function(t, e) {
      var n = this.option,
      i = null == n ? n: n[t],
      r = !e && po(this, t);
      return null == i && r && (i = r.getShallow(t)),
      i
    },
    getModel: function(t, e) {
      var n, i = null == t ? this.option: fo(this.option, t = this.parsePath(t));
      return e = e || (n = po(this, t)) && n.getModel(t),
      new co(i, e, this.ecModel)
    },
    isEmpty: function() {
      return null == this.option
    },
    restoreData: function() {},
    clone: function() {
      var t = this.constructor;
      return new t(i(this.option))
    },
    setReadOnly: function() {},
    parsePath: function(t) {
      return "string" == typeof t && (t = t.split(".")),
      t
    },
    customizeGetParent: function(t) {
      yv(this).getParent = t
    },
    isAnimationEnabled: function() {
      if (!tf.node) {
        if (null != this.option.animation) return !! this.option.animation;
        if (this.parentModel) return this.parentModel.isAnimationEnabled()
      }
    }
  },
  gr(co),
  vr(co),
  mv(co, Sp),
  mv(co, Cp),
  mv(co, pv),
  mv(co, vv);
  var _v = 0,
  xv = 1e-4,
  wv = 9007199254740991,
  bv = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,
  Mv = (Object.freeze || Object)({
    linearMap: _o,
    parsePercent: xo,
    round: wo,
    asc: bo,
    getPrecision: Mo,
    getPrecisionSafe: So,
    getPixelPrecision: To,
    getPercentWithPrecision: Co,
    MAX_SAFE_INTEGER: wv,
    remRadian: ko,
    isRadianAroundZero: Io,
    parseDate: Do,
    quantity: Ao,
    quantityExponent: Lo,
    nice: Po,
    quantile: Oo,
    reformIntervals: Eo,
    isNumeric: Bo
  }),
  Sv = P,
  Tv = /([&<>"'])/g,
  Cv = {
    "&": "&amp;",
    "<": "&lt;",
    ">": "&gt;",
    '"': "&quot;",
    "'": "&#39;"
  },
  kv = ["a", "b", "c", "d", "e", "f", "g"],
  Iv = function(t, e) {
    return "{" + t + (null == e ? "": e) + "}"
  },
  Dv = $n,
  Av = (Object.freeze || Object)({
    addCommas: Ro,
    toCamelCase: zo,
    normalizeCssArray: Sv,
    encodeHTML: Fo,
    formatTpl: No,
    formatTplSimple: Ho,
    getTooltipMarker: Vo,
    formatTime: Go,
    capitalFirst: Xo,
    truncateText: Dv,
    getTextBoundingRect: qo,
    getTextRect: Uo,
    windowOpen: Yo
  }),
  Lv = d,
  Pv = ["left", "right", "top", "bottom", "width", "height"],
  Ov = [["width", "left", "right"], ["height", "top", "bottom"]],
  Ev = (_(jo, "vertical"), _(jo, "horizontal"), {
    getBoxLayoutParams: function() {
      return {
        left: this.get("left"),
        top: this.get("top"),
        right: this.get("right"),
        bottom: this.get("bottom"),
        width: this.get("width"),
        height: this.get("height")
      }
    }
  }),
  Bv = sr(),
  Rv = co.extend({
    type: "component",
    id: "",
    name: "",
    mainType: "",
    subType: "",
    componentIndex: 0,
    defaultOption: null,
    ecModel: null,
    dependentModels: [],
    uid: null,
    layoutMode: null,
    $constructor: function(t, e, n, i) {
      co.call(this, t, e, n, i),
      this.uid = go("ec_cpt_model")
    },
    init: function(t, e, n) {
      this.mergeDefaultAndTheme(t, n)
    },
    mergeDefaultAndTheme: function(t, e) {
      var n = this.layoutMode,
      i = n ? Qo(t) : {},
      a = e.getTheme();
      r(t, a.get(this.mainType)),
      r(t, this.getDefaultOption()),
      n && $o(t, i, n)
    },
    mergeOption: function(t) {
      r(this.option, t, !0);
      var e = this.layoutMode;
      e && $o(this.option, t, e)
    },
    optionUpdated: function() {},
    getDefaultOption: function() {
      var t = Bv(this);
      if (!t.defaultOption) {
        for (var e = [], n = this.constructor; n;) {
          var i = n.prototype.defaultOption;
          i && e.push(i),
          n = n.superClass
        }
        for (var a = {},
        o = e.length - 1; o >= 0; o--) a = r(a, e[o], !0);
        t.defaultOption = a
      }
      return t.defaultOption
    },
    getReferringComponents: function(t) {
      return this.ecModel.queryComponents({
        mainType: t,
        index: this.get(t + "Index", !0),
        id: this.get(t + "Id", !0)
      })
    }
  });
  _r(Rv, {
    registerWhenExtend: !0
  }),
  vo(Rv),
  mo(Rv, Jo),
  c(Rv, Ev);
  var zv = "";
  "undefined" != typeof navigator && (zv = navigator.platform || "");
  var Fv = {
    color: ["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074", "#546570", "#c4ccd3"],
    gradientColor: ["#f6efa6", "#d88273", "#bf444c"],
    textStyle: {
      fontFamily: zv.match(/^Win/) ? "Microsoft YaHei": "sans-serif",
      fontSize: 12,
      fontStyle: "normal",
      fontWeight: "normal"
    },
    blendMode: null,
    animation: "auto",
    animationDuration: 1e3,
    animationDurationUpdate: 300,
    animationEasing: "exponentialOut",
    animationEasingUpdate: "cubicOut",
    animationThreshold: 2e3,
    progressiveThreshold: 3e3,
    progressive: 400,
    hoverLayerThreshold: 3e3,
    useUTC: !1
  },
  Nv = sr(),
  Hv = {
    clearColorPalette: function() {
      Nv(this).colorIdx = 0,
      Nv(this).colorNameMap = {}
    },
    getColorFromPalette: function(t, e, n) {
      e = e || this;
      var i = Nv(e),
      r = i.colorIdx || 0,
      a = i.colorNameMap = i.colorNameMap || {};
      if (a.hasOwnProperty(t)) return a[t];
      var o = Ki(this.get("color", !0)),
      s = this.get("colorLayer", !0),
      l = null != n && s ? ts(s, n) : o;
      if (l = l || o, l && l.length) {
        var u = l[r];
        return t && (a[t] = u),
        i.colorIdx = (r + 1) % l.length,
        u
      }
    }
  },
  Vv = "original",
  Wv = "arrayRows",
  Gv = "objectRows",
  Xv = "keyedColumns",
  qv = "unknown",
  Uv = "typedArray",
  Yv = "column",
  jv = "row";
  es.seriesDataToSource = function(t) {
    return new es({
      data: t,
      sourceFormat: T(t) ? Uv: Vv,
      fromDataset: !1
    })
  },
  vr(es);
  var Zv = {
    Must: 1,
    Might: 2,
    Not: 3
  },
  $v = sr(),
  Qv = "\x00_ec_inner",
  Kv = co.extend({
    init: function(t, e, n, i) {
      n = n || {},
      this.option = null,
      this._theme = new co(n),
      this._optionManager = i
    },
    setOption: function(t, e) {
      O(!(Qv in t), "please use chart.getOption()"),
      this._optionManager.setOption(t, e),
      this.resetOption(null)
    },
    resetOption: function(t) {
      var e = !1,
      n = this._optionManager;
      if (!t || "recreate" === t) {
        var i = n.mountOption("recreate" === t);
        this.option && "recreate" !== t ? (this.restoreData(), this.mergeOption(i)) : ms.call(this, i),
        e = !0
      }
      if (("timeline" === t || "media" === t) && this.restoreData(), !t || "recreate" === t || "timeline" === t) {
        var r = n.getTimelineOption(this);
        r && (this.mergeOption(r), e = !0)
      }
      if (!t || "recreate" === t || "media" === t) {
        var a = n.getMediaOption(this, this._api);
        a.length && d(a,
        function(t) {
          this.mergeOption(t, e = !0)
        },
        this)
      }
      return e
    },
    mergeOption: function(t) {
      function e(e, i) {
        var r = Ki(t[e]),
        s = nr(a.get(e), r);
        ir(s),
        d(s,
        function(t) {
          var n = t.option;
          M(n) && (t.keyInfo.mainType = e, t.keyInfo.subType = _s(e, n, t.exist))
        });
        var l = ys(a, i);
        n[e] = [],
        a.set(e, []),
        d(s,
        function(t, i) {
          var r = t.exist,
          s = t.option;
          if (O(M(s) || r, "Empty component definition"), s) {
            var u = Rv.getClass(e, t.keyInfo.subType, !0);
            if (r && r.constructor === u) r.name = t.keyInfo.name,
            r.mergeOption(s, this),
            r.optionUpdated(s, !1);
            else {
              var h = o({
                dependentModels: l,
                componentIndex: i
              },
              t.keyInfo);
              r = new u(s, this, this, h),
              o(r, h),
              r.init(s, this, this, h),
              r.optionUpdated(null, !0)
            }
          } else r.mergeOption({},
          this),
          r.optionUpdated({},
          !1);
          a.get(e)[i] = r,
          n[e][i] = r.option
        },
        this),
        "series" === e && xs(this, a.get("series"))
      }
      var n = this.option,
      a = this._componentsMap,
      s = [];
      rs(this),
      d(t,
      function(t, e) {
        null != t && (Rv.hasClass(e) ? e && s.push(e) : n[e] = null == n[e] ? i(t) : r(n[e], t, !0))
      }),
      Rv.topologicalTravel(s, Rv.getAllClassMainTypes(), e, this),
      this._seriesIndicesMap = F(this._seriesIndices = this._seriesIndices || [])
    },
    getOption: function() {
      var t = i(this.option);
      return d(t,
      function(e, n) {
        if (Rv.hasClass(n)) {
          for (var e = Ki(e), i = e.length - 1; i >= 0; i--) ar(e[i]) && e.splice(i, 1);
          t[n] = e
        }
      }),
      delete t[Qv],
      t
    },
    getTheme: function() {
      return this._theme
    },
    getComponent: function(t, e) {
      var n = this._componentsMap.get(t);
      return n ? n[e || 0] : void 0
    },
    queryComponents: function(t) {
      var e = t.mainType;
      if (!e) return [];
      var n = t.index,
      i = t.id,
      r = t.name,
      a = this._componentsMap.get(e);
      if (!a || !a.length) return [];
      var o;
      if (null != n) x(n) || (n = [n]),
      o = v(p(n,
      function(t) {
        return a[t]
      }),
      function(t) {
        return !! t
      });
      else if (null != i) {
        var s = x(i);
        o = v(a,
        function(t) {
          return s && u(i, t.id) >= 0 || !s && t.id === i
        })
      } else if (null != r) {
        var l = x(r);
        o = v(a,
        function(t) {
          return l && u(r, t.name) >= 0 || !l && t.name === r
        })
      } else o = a.slice();
      return ws(o, t)
    },
    findComponents: function(t) {
      function e(t) {
        var e = r + "Index",
        n = r + "Id",
        i = r + "Name";
        return ! t || null == t[e] && null == t[n] && null == t[i] ? null: {
          mainType: r,
          index: t[e],
          id: t[n],
          name: t[i]
        }
      }
      function n(e) {
        return t.filter ? v(e, t.filter) : e
      }
      var i = t.query,
      r = t.mainType,
      a = e(i),
      o = a ? this.queryComponents(a) : this._componentsMap.get(r);
      return n(ws(o, t))
    },
    eachComponent: function(t, e, n) {
      var i = this._componentsMap;
      if ("function" == typeof t) n = e,
      e = t,
      i.each(function(t, i) {
        d(t,
        function(t, r) {
          e.call(n, i, t, r)
        })
      });
      else if (b(t)) d(i.get(t), e, n);
      else if (M(t)) {
        var r = this.findComponents(t);
        d(r, e, n)
      }
    },
    getSeriesByName: function(t) {
      var e = this._componentsMap.get("series");
      return v(e,
      function(e) {
        return e.name === t
      })
    },
    getSeriesByIndex: function(t) {
      return this._componentsMap.get("series")[t]
    },
    getSeriesByType: function(t) {
      var e = this._componentsMap.get("series");
      return v(e,
      function(e) {
        return e.subType === t
      })
    },
    getSeries: function() {
      return this._componentsMap.get("series").slice()
    },
    getSeriesCount: function() {
      return this._componentsMap.get("series").length
    },
    eachSeries: function(t, e) {
      d(this._seriesIndices,
      function(n) {
        var i = this._componentsMap.get("series")[n];
        t.call(e, i, n)
      },
      this)
    },
    eachRawSeries: function(t, e) {
      d(this._componentsMap.get("series"), t, e)
    },
    eachSeriesByType: function(t, e, n) {
      d(this._seriesIndices,
      function(i) {
        var r = this._componentsMap.get("series")[i];
        r.subType === t && e.call(n, r, i)
      },
      this)
    },
    eachRawSeriesByType: function(t, e, n) {
      return d(this.getSeriesByType(t), e, n)
    },
    isSeriesFiltered: function(t) {
      return null == this._seriesIndicesMap.get(t.componentIndex)
    },
    getCurrentSeriesIndices: function() {
      return (this._seriesIndices || []).slice()
    },
    filterSeries: function(t, e) {
      var n = v(this._componentsMap.get("series"), t, e);
      xs(this, n)
    },
    restoreData: function(t) {
      var e = this._componentsMap;
      xs(this, e.get("series"));
      var n = [];
      e.each(function(t, e) {
        n.push(e)
      }),
      Rv.topologicalTravel(n, Rv.getAllClassMainTypes(),
      function(n) {
        d(e.get(n),
        function(e) { ("series" !== n || !gs(e, t)) && e.restoreData()
        })
      })
    }
  });
  c(Kv, Hv);
  var Jv = ["getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel", "getViewOfSeriesModel"],
  tm = {};
  Ms.prototype = {
    constructor: Ms,
    create: function(t, e) {
      var n = [];
      d(tm,
      function(i) {
        var r = i.create(t, e);
        n = n.concat(r || [])
      }),
      this._coordinateSystems = n
    },
    update: function(t, e) {
      d(this._coordinateSystems,
      function(n) {
        n.update && n.update(t, e)
      })
    },
    getCoordinateSystems: function() {
      return this._coordinateSystems.slice()
    }
  },
  Ms.register = function(t, e) {
    tm[t] = e
  },
  Ms.get = function(t) {
    return tm[t]
  };
  var em = d,
  nm = i,
  im = p,
  rm = r,
  am = /^(min|max)?(.+)$/;
  Ss.prototype = {
    constructor: Ss,
    setOption: function(t, e) {
      t && d(Ki(t.series),
      function(t) {
        t && t.data && T(t.data) && B(t.data)
      }),
      t = nm(t);
      var n = this._optionBackup,
      i = Ts.call(this, t, e, !n);
      this._newBaseOption = i.baseOption,
      n ? (Ds(n.baseOption, i.baseOption), i.timelineOptions.length && (n.timelineOptions = i.timelineOptions), i.mediaList.length && (n.mediaList = i.mediaList), i.mediaDefault && (n.mediaDefault = i.mediaDefault)) : this._optionBackup = i
    },
    mountOption: function(t) {
      var e = this._optionBackup;
      return this._timelineOptions = im(e.timelineOptions, nm),
      this._mediaList = im(e.mediaList, nm),
      this._mediaDefault = nm(e.mediaDefault),
      this._currentMediaIndices = [],
      nm(t ? e.baseOption: this._newBaseOption)
    },
    getTimelineOption: function(t) {
      var e, n = this._timelineOptions;
      if (n.length) {
        var i = t.getComponent("timeline");
        i && (e = nm(n[i.getCurrentIndex()], !0))
      }
      return e
    },
    getMediaOption: function() {
      var t = this._api.getWidth(),
      e = this._api.getHeight(),
      n = this._mediaList,
      i = this._mediaDefault,
      r = [],
      a = [];
      if (!n.length && !i) return a;
      for (var o = 0,
      s = n.length; s > o; o++) Cs(n[o].query, t, e) && r.push(o);
      return ! r.length && i && (r = [ - 1]),
      r.length && !Is(r, this._currentMediaIndices) && (a = im(r,
      function(t) {
        return nm( - 1 === t ? i.option: n[t].option)
      })),
      this._currentMediaIndices = r,
      a
    }
  };
  var om = d,
  sm = M,
  lm = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"],
  um = function(t, e) {
    om(Rs(t.series),
    function(t) {
      sm(t) && Bs(t)
    });
    var n = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"];
    e && n.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"),
    om(n,
    function(e) {
      om(Rs(t[e]),
      function(t) {
        t && (Os(t, "axisLabel"), Os(t.axisPointer, "label"))
      })
    }),
    om(Rs(t.parallel),
    function(t) {
      var e = t && t.parallelAxisDefault;
      Os(e, "axisLabel"),
      Os(e && e.axisPointer, "label")
    }),
    om(Rs(t.calendar),
    function(t) {
      Ls(t, "itemStyle"),
      Os(t, "dayLabel"),
      Os(t, "monthLabel"),
      Os(t, "yearLabel")
    }),
    om(Rs(t.radar),
    function(t) {
      Os(t, "name")
    }),
    om(Rs(t.geo),
    function(t) {
      sm(t) && (Es(t), om(Rs(t.regions),
      function(t) {
        Es(t)
      }))
    }),
    om(Rs(t.timeline),
    function(t) {
      Es(t),
      Ls(t, "label"),
      Ls(t, "itemStyle"),
      Ls(t, "controlStyle", !0);
      var e = t.data;
      x(e) && d(e,
      function(t) {
        M(t) && (Ls(t, "label"), Ls(t, "itemStyle"))
      })
    }),
    om(Rs(t.toolbox),
    function(t) {
      Ls(t, "iconStyle"),
      om(t.feature,
      function(t) {
        Ls(t, "iconStyle")
      })
    }),
    Os(zs(t.axisPointer), "label"),
    Os(zs(t.tooltip).axisPointer, "label")
  },
  hm = [["x", "left"], ["y", "top"], ["x2", "right"], ["y2", "bottom"]],
  cm = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"],
  fm = function(t, e) {
    um(t, e),
    t.series = Ki(t.series),
    d(t.series,
    function(t) {
      if (M(t)) {
        var e = t.type;
        if ("line" === e) null != t.clipOverflow && (t.clip = t.clipOverflow);
        else if ("pie" === e || "gauge" === e) null != t.clockWise && (t.clockwise = t.clockWise);
        else if ("gauge" === e) {
          var n = Fs(t, "pointer.color");
          null != n && Ns(t, "itemStyle.color", n)
        }
        Hs(t)
      }
    }),
    t.dataRange && (t.visualMap = t.dataRange),
    d(cm,
    function(e) {
      var n = t[e];
      n && (x(n) || (n = [n]), d(n,
      function(t) {
        Hs(t)
      }))
    })
  },
  dm = function(t) {
    var e = F();
    t.eachSeries(function(t) {
      var n = t.get("stack");
      if (n) {
        var i = e.get(n) || e.set(n, []),
        r = t.getData(),
        a = {
          stackResultDimension: r.getCalculationInfo("stackResultDimension"),
          stackedOverDimension: r.getCalculationInfo("stackedOverDimension"),
          stackedDimension: r.getCalculationInfo("stackedDimension"),
          stackedByDimension: r.getCalculationInfo("stackedByDimension"),
          isStackedByIndex: r.getCalculationInfo("isStackedByIndex"),
          data: r,
          seriesModel: t
        };
        if (!a.stackedDimension || !a.isStackedByIndex && !a.stackedByDimension) return;
        i.length && r.setCalculationInfo("stackedOnSeries", i[i.length - 1].seriesModel),
        i.push(a)
      }
    }),
    e.each(Vs)
  },
  pm = Ws.prototype;
  pm.pure = !1,
  pm.persistent = !0,
  pm.getSource = function() {
    return this._source
  };
  var gm = {
    arrayRows_column: {
      pure: !0,
      count: function() {
        return Math.max(0, this._data.length - this._source.startIndex)
      },
      getItem: function(t) {
        return this._data[t + this._source.startIndex]
      },
      appendData: qs
    },
    arrayRows_row: {
      pure: !0,
      count: function() {
        var t = this._data[0];
        return t ? Math.max(0, t.length - this._source.startIndex) : 0
      },
      getItem: function(t) {
        t += this._source.startIndex;
        for (var e = [], n = this._data, i = 0; i < n.length; i++) {
          var r = n[i];
          e.push(r ? r[t] : null)
        }
        return e
      },
      appendData: function() {
        throw new Error('Do not support appendData when set seriesLayoutBy: "row".')
      }
    },
    objectRows: {
      pure: !0,
      count: Gs,
      getItem: Xs,
      appendData: qs
    },
    keyedColumns: {
      pure: !0,
      count: function() {
        var t = this._source.dimensionsDefine[0].name,
        e = this._data[t];
        return e ? e.length: 0
      },
      getItem: function(t) {
        for (var e = [], n = this._source.dimensionsDefine, i = 0; i < n.length; i++) {
          var r = this._data[n[i].name];
          e.push(r ? r[t] : null)
        }
        return e
      },
      appendData: function(t) {
        var e = this._data;
        d(t,
        function(t, n) {
          for (var i = e[n] || (e[n] = []), r = 0; r < (t || []).length; r++) i.push(t[r])
        })
      }
    },
    original: {
      count: Gs,
      getItem: Xs,
      appendData: qs
    },
    typedArray: {
      persistent: !1,
      pure: !0,
      count: function() {
        return this._data ? this._data.length / this._dimSize: 0
      },
      getItem: function(t, e) {
        t -= this._offset,
        e = e || [];
        for (var n = this._dimSize * t,
        i = 0; i < this._dimSize; i++) e[i] = this._data[n + i];
        return e
      },
      appendData: function(t) {
        this._data = t
      },
      clean: function() {
        this._offset += this.count(),
        this._data = null
      }
    }
  },
  vm = {
    arrayRows: Us,
    objectRows: function(t, e, n, i) {
      return null != n ? t[i] : t
    },
    keyedColumns: Us,
    original: function(t, e, n) {
      var i = tr(t);
      return null != n && i instanceof Array ? i[n] : i
    },
    typedArray: Us
  },
  mm = {
    arrayRows: Ys,
    objectRows: function(t, e) {
      return js(t[e], this._dimensionInfos[e])
    },
    keyedColumns: Ys,
    original: function(t, e, n, i) {
      var r = t && (null == t.value ? t: t.value);
      return ! this._rawData.pure && er(t) && (this.hasItemOption = !0),
      js(r instanceof Array ? r[i] : r, this._dimensionInfos[e])
    },
    typedArray: function(t, e, n, i) {
      return t[i]
    }
  },
  ym = /\{@(.+?)\}/g,
  _m = {
    getDataParams: function(t, e) {
      var n = this.getData(e),
      i = this.getRawValue(t, e),
      r = n.getRawIndex(t),
      a = n.getName(t),
      o = n.getRawDataItem(t),
      s = n.getItemVisual(t, "color"),
      l = n.getItemVisual(t, "borderColor"),
      u = this.ecModel.getComponent("tooltip"),
      h = u && u.get("renderMode"),
      c = fr(h),
      f = this.mainType,
      d = "series" === f,
      p = n.userOutput;
      return {
        componentType: f,
        componentSubType: this.subType,
        componentIndex: this.componentIndex,
        seriesType: d ? this.subType: null,
        seriesIndex: this.seriesIndex,
        seriesId: d ? this.id: null,
        seriesName: d ? this.name: null,
        name: a,
        dataIndex: r,
        data: o,
        dataType: e,
        value: i,
        color: s,
        borderColor: l,
        dimensionNames: p ? p.dimensionNames: null,
        encode: p ? p.encode: null,
        marker: Vo({
          color: s,
          renderMode: c
        }),
        $vars: ["seriesName", "name", "value"]
      }
    },
    getFormattedLabel: function(t, e, n, i, r) {
      e = e || "normal";
      var a = this.getData(n),
      o = a.getItemModel(t),
      s = this.getDataParams(t, n);
      null != i && s.value instanceof Array && (s.value = s.value[i]);
      var l = o.get("normal" === e ? [r || "label", "formatter"] : [e, r || "label", "formatter"]);
      if ("function" == typeof l) return s.status = e,
      s.dimensionIndex = i,
      l(s);
      if ("string" == typeof l) {
        var u = No(l, s);
        return u.replace(ym,
        function(e, n) {
          var i = n.length;
          return "[" === n.charAt(0) && "]" === n.charAt(i - 1) && (n = +n.slice(1, i - 1)),
          Zs(a, t, n)
        })
      }
    },
    getRawValue: function(t, e) {
      return Zs(this.getData(e), t)
    },
    formatTooltip: function() {}
  },
  xm = Ks.prototype;
  xm.perform = function(t) {
    function e(t) {
      return ! (t >= 1) && (t = 1),
      t
    }
    var n = this._upstream,
    i = t && t.skip;
    if (this._dirty && n) {
      var r = this.context;
      r.data = r.outputData = n.context.outputData
    }
    this.__pipeline && (this.__pipeline.currentTask = this);
    var a;
    this._plan && !i && (a = this._plan(this.context));
    var o = e(this._modBy),
    s = this._modDataCount || 0,
    l = e(t && t.modBy),
    u = t && t.modDataCount || 0; (o !== l || s !== u) && (a = "reset");
    var h; (this._dirty || "reset" === a) && (this._dirty = !1, h = tl(this, i)),
    this._modBy = l,
    this._modDataCount = u;
    var c = t && t.step;
    if (this._dueEnd = n ? n._outputDueEnd: this._count ? this._count(this.context) : 1 / 0, this._progress) {
      var f = this._dueIndex,
      d = Math.min(null != c ? this._dueIndex + c: 1 / 0, this._dueEnd);
      if (!i && (h || d > f)) {
        var p = this._progress;
        if (x(p)) for (var g = 0; g < p.length; g++) Js(this, p[g], f, d, l, u);
        else Js(this, p, f, d, l, u)
      }
      this._dueIndex = d;
      var v = null != this._settedOutputEnd ? this._settedOutputEnd: d;
      this._outputDueEnd = v
    } else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd: this._dueEnd;
    return this.unfinished()
  };
  var wm = function() {
    function t() {
      return n > i ? i++:null
    }
    function e() {
      var t = i % o * r + Math.ceil(i / o),
      e = i >= n ? null: a > t ? t: i;
      return i++,
      e
    }
    var n, i, r, a, o, s = {
      reset: function(l, u, h, c) {
        i = l,
        n = u,
        r = h,
        a = c,
        o = Math.ceil(a / r),
        s.next = r > 1 && a > 0 ? e: t
      }
    };
    return s
  } ();
  xm.dirty = function() {
    this._dirty = !0,
    this._onDirty && this._onDirty(this.context)
  },
  xm.unfinished = function() {
    return this._progress && this._dueIndex < this._dueEnd
  },
  xm.pipe = function(t) { (this._downstream !== t || this._dirty) && (this._downstream = t, t._upstream = this, t.dirty())
  },
  xm.dispose = function() {
    this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream = null), this._dirty = !1, this._disposed = !0)
  },
  xm.getUpstream = function() {
    return this._upstream
  },
  xm.getDownstream = function() {
    return this._downstream
  },
  xm.setOutputEnd = function(t) {
    this._outputDueEnd = this._settedOutputEnd = t
  };
  var bm = sr(),
  Mm = Rv.extend({
    type: "series.__base__",
    seriesIndex: 0,
    coordinateSystem: null,
    defaultOption: null,
    legendVisualProvider: null,
    visualColorAccessPath: "itemStyle.color",
    visualBorderColorAccessPath: "itemStyle.borderColor",
    layoutMode: null,
    init: function(t, e, n) {
      this.seriesIndex = this.componentIndex,
      this.dataTask = Qs({
        count: il,
        reset: rl
      }),
      this.dataTask.context = {
        model: this
      },
      this.mergeDefaultAndTheme(t, n),
      as(this);
      var i = this.getInitialData(t, n);
      ol(i, this),
      this.dataTask.context.data = i,
      bm(this).dataBeforeProcessed = i,
      el(this)
    },
    mergeDefaultAndTheme: function(t, e) {
      var n = this.layoutMode,
      i = n ? Qo(t) : {},
      a = this.subType;
      Rv.hasClass(a) && (a += "Series"),
      r(t, e.getTheme().get(this.subType)),
      r(t, this.getDefaultOption()),
      Ji(t, "label", ["show"]),
      this.fillDataTextStyle(t.data),
      n && $o(t, i, n)
    },
    mergeOption: function(t, e) {
      t = r(this.option, t, !0),
      this.fillDataTextStyle(t.data);
      var n = this.layoutMode;
      n && $o(this.option, t, n),
      as(this);
      var i = this.getInitialData(t, e);
      ol(i, this),
      this.dataTask.dirty(),
      this.dataTask.context.data = i,
      bm(this).dataBeforeProcessed = i,
      el(this)
    },
    fillDataTextStyle: function(t) {
      if (t && !T(t)) for (var e = ["show"], n = 0; n < t.length; n++) t[n] && t[n].label && Ji(t[n], "label", e)
    },
    getInitialData: function() {},
    appendData: function(t) {
      var e = this.getRawData();
      e.appendData(t.data)
    },
    getData: function(t) {
      var e = ll(this);
      if (e) {
        var n = e.context.data;
        return null == t ? n: n.getLinkedData(t)
      }
      return bm(this).data
    },
    setData: function(t) {
      var e = ll(this);
      if (e) {
        var n = e.context;
        n.data !== t && e.modifyOutputEnd && e.setOutputEnd(t.count()),
        n.outputData = t,
        e !== this.dataTask && (n.data = t)
      }
      bm(this).data = t
    },
    getSource: function() {
      return is(this)
    },
    getRawData: function() {
      return bm(this).dataBeforeProcessed
    },
    getBaseAxis: function() {
      var t = this.coordinateSystem;
      return t && t.getBaseAxis && t.getBaseAxis()
    },
    formatTooltip: function(t, e, n, i) {
      function r(n) {
        function r(t, n) {
          var r = c.getDimensionInfo(n);
          if (r && r.otherDims.tooltip !== !1) {
            var f = r.type,
            d = "sub" + o.seriesIndex + "at" + h,
            p = Vo({
              color: y,
              type: "subItem",
              renderMode: i,
              markerId: d
            }),
            g = "string" == typeof p ? p: p.content,
            v = (a ? g + Fo(r.displayName || "-") + ": ": "") + Fo("ordinal" === f ? t + "": "time" === f ? e ? "": Go("yyyy/MM/dd hh:mm:ss", t) : Ro(t));
            v && s.push(v),
            l && (u[d] = y, ++h)
          }
        }
        var a = g(n,
        function(t, e, n) {
          var i = c.getDimensionInfo(n);
          return t |= i && i.tooltip !== !1 && null != i.displayName
        },
        0),
        s = [];
        f.length ? d(f,
        function(e) {
          r(Zs(c, t, e), e)
        }) : d(n, r);
        var p = a ? l ? "\n": "<br/>": "",
        v = p + s.join(p || ", ");
        return {
          renderMode: i,
          content: v,
          style: u
        }
      }
      function a(t) {
        return {
          renderMode: i,
          content: Fo(Ro(t)),
          style: u
        }
      }
      var o = this;
      i = i || "html";
      var s = "html" === i ? "<br/>": "\n",
      l = "richText" === i,
      u = {},
      h = 0,
      c = this.getData(),
      f = c.mapDimension("defaultedTooltip", !0),
      p = f.length,
      v = this.getRawValue(t),
      m = x(v),
      y = c.getItemVisual(t, "color");
      M(y) && y.colorStops && (y = (y.colorStops[0] || {}).color),
      y = y || "transparent";
      var _ = p > 1 || m && !p ? r(v) : a(p ? Zs(c, t, f[0]) : m ? v[0] : v),
      w = _.content,
      b = o.seriesIndex + "at" + h,
      S = Vo({
        color: y,
        type: "item",
        renderMode: i,
        markerId: b
      });
      u[b] = y,
      ++h;
      var T = c.getName(t),
      C = this.name;
      rr(this) || (C = ""),
      C = C ? Fo(C) + (e ? ": ": s) : "";
      var k = "string" == typeof S ? S: S.content,
      I = e ? k + C + w: C + k + (T ? Fo(T) + ": " + w: w);
      return {
        html: I,
        markers: u
      }
    },
    isAnimationEnabled: function() {
      if (tf.node) return ! 1;
      var t = this.getShallow("animation");
      return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1),
      t
    },
    restoreData: function() {
      this.dataTask.dirty()
    },
    getColorFromPalette: function(t, e, n) {
      var i = this.ecModel,
      r = Hv.getColorFromPalette.call(this, t, e, n);
      return r || (r = i.getColorFromPalette(t, e, n)),
      r
    },
    coordDimToDataDim: function(t) {
      return this.getRawData().mapDimension(t, !0)
    },
    getProgressive: function() {
      return this.get("progressive")
    },
    getProgressiveThreshold: function() {
      return this.get("progressiveThreshold")
    },
    getAxisTooltipData: null,
    getTooltipPosition: null,
    pipeTask: null,
    preventIncremental: null,
    pipelineContext: null
  });
  c(Mm, _m),
  c(Mm, Hv);
  var Sm = function() {
    this.group = new pd,
    this.uid = go("viewComponent")
  };
  Sm.prototype = {
    constructor: Sm,
    init: function() {},
    render: function() {},
    dispose: function() {},
    filterForExposedEvent: null
  };
  var Tm = Sm.prototype;
  Tm.updateView = Tm.updateLayout = Tm.updateVisual = function() {},
  gr(Sm),
  _r(Sm, {
    registerWhenExtend: !0
  });
  var Cm = function() {
    var t = sr();
    return function(e) {
      var n = t(e),
      i = e.pipelineContext,
      r = n.large,
      a = n.progressiveRender,
      o = n.large = i && i.large,
      s = n.progressiveRender = i && i.progressiveRender;
      return !! (r ^ o || a ^ s) && "reset"
    }
  },
  km = sr(),
  Im = Cm();
  ul.prototype = {
    type: "chart",
    init: function() {},
    render: function() {},
    highlight: function(t, e, n, i) {
      cl(t.getData(), i, "emphasis")
    },
    downplay: function(t, e, n, i) {
      cl(t.getData(), i, "normal")
    },
    remove: function() {
      this.group.removeAll()
    },
    dispose: function() {},
    incrementalPrepareRender: null,
    incrementalRender: null,
    updateTransform: null,
    filterForExposedEvent: null
  };
  var Dm = ul.prototype;
  Dm.updateView = Dm.updateLayout = Dm.updateVisual = function(t, e, n, i) {
    this.render(t, e, n, i)
  },
  gr(ul, ["dispose"]),
  _r(ul, {
    registerWhenExtend: !0
  }),
  ul.markUpdateMethod = function(t, e) {
    km(t).updateMethod = e
  };
  var Am = {
    incrementalPrepareRender: {
      progress: function(t, e) {
        e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload)
      }
    },
    render: {
      forceFirstProgress: !0,
      progress: function(t, e) {
        e.view.render(e.model, e.ecModel, e.api, e.payload)
      }
    }
  },
  Lm = {
    createOnAllSeries: !0,
    performRawSeries: !0,
    reset: function(t, e) {
      var n = t.getData(),
      i = (t.visualColorAccessPath || "itemStyle.color").split("."),
      r = t.get(i),
      a = !w(r) || r instanceof jg ? null: r; (!r || a) && (r = t.getColorFromPalette(t.name, null, e.getSeriesCount())),
      n.setVisual("color", r);
      var o = (t.visualBorderColorAccessPath || "itemStyle.borderColor").split("."),
      s = t.get(o);
      if (n.setVisual("borderColor", s), !e.isSeriesFiltered(t)) {
        a && n.each(function(e) {
          n.setItemVisual(e, "color", a(t.getDataParams(e)))
        });
        var l = function(t, e) {
          var n = t.getItemModel(e),
          r = n.get(i, !0),
          a = n.get(o, !0);
          null != r && t.setItemVisual(e, "color", r),
          null != a && t.setItemVisual(e, "borderColor", a)
        };
        return {
          dataEach: n.hasItemOption ? l: null
        }
      }
    }
  },
  Pm = {
    legend: {
      selector: {
        all: "全选",
        inverse: "反选"
      }
    },
    toolbox: {
      brush: {
        title: {
          rect: "矩形选择",
          polygon: "圈选",
          lineX: "横向选择",
          lineY: "纵向选择",
          keep: "保持选择",
          clear: "清除选择"
        }
      },
      dataView: {
        title: "数据视图",
        lang: ["数据视图", "关闭", "刷新"]
      },
      dataZoom: {
        title: {
          zoom: "区域缩放",
          back: "区域缩放还原"
        }
      },
      magicType: {
        title: {
          line: "切换为折线图",
          bar: "切换为柱状图",
          stack: "切换为堆叠",
          tiled: "切换为平铺"
        }
      },
      restore: {
        title: "还原"
      },
      saveAsImage: {
        title: "保存为图片",
        lang: ["右键另存为图片"]
      }
    },
    series: {
      typeNames: {
        pie: "饼图",
        bar: "柱状图",
        line: "折线图",
        scatter: "散点图",
        effectScatter: "涟漪散点图",
        radar: "雷达图",
        tree: "树图",
        treemap: "矩形树图",
        boxplot: "箱型图",
        candlestick: "K线图",
        k: "K线图",
        heatmap: "热力图",
        map: "地图",
        parallel: "平行坐标图",
        lines: "线图",
        graph: "关系图",
        sankey: "桑基图",
        funnel: "漏斗图",
        gauge: "仪表盘图",
        pictorialBar: "象形柱图",
        themeRiver: "主题河流图",
        sunburst: "旭日图"
      }
    },
    aria: {
      general: {
        withTitle: "这是一个关于“{title}”的图表。",
        withoutTitle: "这是一个图表，"
      },
      series: {
        single: {
          prefix: "",
          withName: "图表类型是{seriesType}，表示{seriesName}。",
          withoutName: "图表类型是{seriesType}。"
        },
        multiple: {
          prefix: "它由{seriesCount}个图表系列组成。",
          withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType}，",
          withoutName: "第{seriesId}个系列是一个{seriesType}，",
          separator: {
            middle: "；",
            end: "。"
          }
        }
      },
      data: {
        allData: "其数据是——",
        partialData: "其中，前{displayCnt}项是——",
        withName: "{name}的数据是{value}",
        withoutName: "{value}",
        separator: {
          middle: "，",
          end: ""
        }
      }
    }
  },
  Om = function(t, e) {
    function n(t, e) {
      if ("string" != typeof t) return t;
      var n = t;
      return d(e,
      function(t, e) {
        n = n.replace(new RegExp("\\{\\s*" + e + "\\s*\\}", "g"), t)
      }),
      n
    }
    function i(t) {
      var e = o.get(t);
      if (null == e) {
        for (var n = t.split("."), i = Pm.aria, r = 0; r < n.length; ++r) i = i[n[r]];
        return i
      }
      return e
    }
    function r() {
      var t = e.getModel("title").option;
      return t && t.length && (t = t[0]),
      t && t.text
    }
    function a(t) {
      return Pm.series.typeNames[t] || "自定义图"
    }
    var o = e.getModel("aria");
    if (o.get("show")) {
      if (o.get("description")) return void t.setAttribute("aria-label", o.get("description"));
      var s = 0;
      e.eachSeries(function() {++s
      },
      this);
      var l, u = o.get("data.maxCount") || 10,
      h = o.get("series.maxCount") || 10,
      c = Math.min(s, h);
      if (! (1 > s)) {
        var f = r();
        l = f ? n(i("general.withTitle"), {
          title: f
        }) : i("general.withoutTitle");
        var p = [],
        g = s > 1 ? "series.multiple.prefix": "series.single.prefix";
        l += n(i(g), {
          seriesCount: s
        }),
        e.eachSeries(function(t, e) {
          if (c > e) {
            var r, o = t.get("name"),
            l = "series." + (s > 1 ? "multiple": "single") + ".";
            r = i(o ? l + "withName": l + "withoutName"),
            r = n(r, {
              seriesId: t.seriesIndex,
              seriesName: t.get("name"),
              seriesType: a(t.subType)
            });
            var h = t.getData();
            window.data = h,
            r += h.count() > u ? n(i("data.partialData"), {
              displayCnt: u
            }) : i("data.allData");
            for (var f = [], d = 0; d < h.count(); d++) if (u > d) {
              var g = h.getName(d),
              v = Zs(h, d);
              f.push(n(i(g ? "data.withName": "data.withoutName"), {
                name: g,
                value: v
              }))
            }
            r += f.join(i("data.separator.middle")) + i("data.separator.end"),
            p.push(r)
          }
        }),
        l += p.join(i("series.multiple.separator.middle")) + i("series.multiple.separator.end"),
        t.setAttribute("aria-label", l)
      }
    }
  },
  Em = Math.PI,
  Bm = function(t, e) {
    e = e || {},
    s(e, {
      text: "loading",
      textColor: "#000",
      fontSize: "12px",
      maskColor: "rgba(255, 255, 255, 0.8)",
      showSpinner: !0,
      color: "#c23531",
      spinnerRadius: 10,
      lineWidth: 5,
      zlevel: 0
    });
    var n = new pd,
    i = new Vg({
      style: {
        fill: e.maskColor
      },
      zlevel: e.zlevel,
      z: 1e4
    });
    n.add(i);
    var r = e.fontSize + " sans-serif",
    a = new Vg({
      style: {
        fill: "none",
        text: e.text,
        font: r,
        textPosition: "right",
        textDistance: 10,
        textFill: e.textColor
      },
      zlevel: e.zlevel,
      z: 10001
    });
    if (n.add(a), e.showSpinner) {
      var o = new Ug({
        shape: {
          startAngle: -Em / 2,
          endAngle: -Em / 2 + .1,
          r: e.spinnerRadius
        },
        style: {
          stroke: e.color,
          lineCap: "round",
          lineWidth: e.lineWidth
        },
        zlevel: e.zlevel,
        z: 10001
      });
      o.animateShape(!0).when(1e3, {
        endAngle: 3 * Em / 2
      }).start("circularInOut"),
      o.animateShape(!0).when(1e3, {
        startAngle: 3 * Em / 2
      }).delay(300).start("circularInOut"),
      n.add(o)
    }
    return n.resize = function() {
      var n = Gn(e.text, r),
      s = e.showSpinner ? e.spinnerRadius: 0,
      l = (t.getWidth() - 2 * s - (e.showSpinner && n ? 10 : 0) - n) / 2 - (e.showSpinner ? 0 : n / 2),
      u = t.getHeight() / 2;
      e.showSpinner && o.setShape({
        cx: l,
        cy: u
      }),
      a.setShape({
        x: l - s,
        y: u - s,
        width: 2 * s,
        height: 2 * s
      }),
      i.setShape({
        x: 0,
        y: 0,
        width: t.getWidth(),
        height: t.getHeight()
      })
    },
    n.resize(),
    n
  },
  Rm = gl.prototype;
  Rm.restoreData = function(t, e) {
    t.restoreData(e),
    this._stageTaskMap.each(function(t) {
      var e = t.overallTask;
      e && e.dirty()
    })
  },
  Rm.getPerformArgs = function(t, e) {
    if (t.__pipeline) {
      var n = this._pipelineMap.get(t.__pipeline.id),
      i = n.context,
      r = !e && n.progressiveEnabled && (!i || i.progressiveRender) && t.__idxInPipeline > n.blockIndex,
      a = r ? n.step: null,
      o = i && i.modDataCount,
      s = null != o ? Math.ceil(o / a) : null;
      return {
        step: a,
        modBy: s,
        modDataCount: o
      }
    }
  },
  Rm.getPipeline = function(t) {
    return this._pipelineMap.get(t)
  },
  Rm.updateStreamModes = function(t, e) {
    var n = this._pipelineMap.get(t.uid),
    i = t.getData(),
    r = i.count(),
    a = n.progressiveEnabled && e.incrementalPrepareRender && r >= n.threshold,
    o = t.get("large") && r >= t.get("largeThreshold"),
    s = "mod" === t.get("progressiveChunkMode") ? r: null;
    t.pipelineContext = n.context = {
      progressiveRender: a,
      modDataCount: s,
      large: o
    }
  },
  Rm.restorePipelines = function(t) {
    var e = this,
    n = e._pipelineMap = F();
    t.eachSeries(function(t) {
      var i = t.getProgressive(),
      r = t.uid;
      n.set(r, {
        id: r,
        head: null,
        tail: null,
        threshold: t.getProgressiveThreshold(),
        progressiveEnabled: i && !(t.preventIncremental && t.preventIncremental()),
        blockIndex: -1,
        step: Math.round(i || 700),
        count: 0
      }),
      kl(e, t, t.dataTask)
    })
  },
  Rm.prepareStageTasks = function() {
    var t = this._stageTaskMap,
    e = this.ecInstance.getModel(),
    n = this.api;
    d(this._allHandlers,
    function(i) {
      var r = t.get(i.uid) || t.set(i.uid, []);
      i.reset && ml(this, i, r, e, n),
      i.overallReset && yl(this, i, r, e, n)
    },
    this)
  },
  Rm.prepareView = function(t, e, n, i) {
    var r = t.renderTask,
    a = r.context;
    a.model = e,
    a.ecModel = n,
    a.api = i,
    r.__block = !t.incrementalPrepareRender,
    kl(this, e, r)
  },
  Rm.performDataProcessorTasks = function(t, e) {
    vl(this, this._dataProcessorHandlers, t, e, {
      block: !0
    })
  },
  Rm.performVisualTasks = function(t, e, n) {
    vl(this, this._visualHandlers, t, e, n)
  },
  Rm.performSeriesTasks = function(t) {
    var e;
    t.eachSeries(function(t) {
      e |= t.dataTask.perform()
    }),
    this.unfinished |= e
  },
  Rm.plan = function() {
    this._pipelineMap.each(function(t) {
      var e = t.tail;
      do {
        if (e.__block) {
          t.blockIndex = e.__idxInPipeline;
          break
        }
        e = e.getUpstream()
      } while ( e )
    })
  };
  var zm = Rm.updatePayload = function(t, e) {
    "remain" !== e && (t.context.payload = e)
  },
  Fm = Tl(0);
  gl.wrapStageHandler = function(t, e) {
    return w(t) && (t = {
      overallReset: t,
      seriesType: Il(t)
    }),
    t.uid = go("stageHandler"),
    e && (t.visualType = e),
    t
  };
  var Nm, Hm = {},
  Vm = {};
  Dl(Hm, Kv),
  Dl(Vm, bs),
  Hm.eachSeriesByType = Hm.eachRawSeriesByType = function(t) {
    Nm = t
  },
  Hm.eachComponent = function(t) {
    "series" === t.mainType && t.subType && (Nm = t.subType)
  };
  var Wm = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1", "#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"],
  Gm = {
    color: Wm,
    colorLayer: [["#37A2DA", "#ffd85c", "#fd7b5f"], ["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"], ["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], Wm]
  },
  Xm = "#eee",
  qm = function() {
    return {
      axisLine: {
        lineStyle: {
          color: Xm
        }
      },
      axisTick: {
        lineStyle: {
          color: Xm
        }
      },
      axisLabel: {
        textStyle: {
          color: Xm
        }
      },
      splitLine: {
        lineStyle: {
          type: "dashed",
          color: "#aaa"
        }
      },
      splitArea: {
        areaStyle: {
          color: Xm
        }
      }
    }
  },
  Um = ["#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c", "#f49f42"],
  Ym = {
    color: Um,
    backgroundColor: "#333",
    tooltip: {
      axisPointer: {
        lineStyle: {
          color: Xm
        },
        crossStyle: {
          color: Xm
        },
        label: {
          color: "#000"
        }
      }
    },
    legend: {
      textStyle: {
        color: Xm
      }
    },
    textStyle: {
      color: Xm
    },
    title: {
      textStyle: {
        color: Xm
      }
    },
    toolbox: {
      iconStyle: {
        normal: {
          borderColor: Xm
        }
      }
    },
    dataZoom: {
      textStyle: {
        color: Xm
      }
    },
    visualMap: {
      textStyle: {
        color: Xm
      }
    },
    timeline: {
      lineStyle: {
        color: Xm
      },
      itemStyle: {
        normal: {
          color: Um[1]
        }
      },
      label: {
        normal: {
          textStyle: {
            color: Xm
          }
        }
      },
      controlStyle: {
        normal: {
          color: Xm,
          borderColor: Xm
        }
      }
    },
    timeAxis: qm(),
    logAxis: qm(),
    valueAxis: qm(),
    categoryAxis: qm(),
    line: {
      symbol: "circle"
    },
    graph: {
      color: Um
    },
    gauge: {
      title: {
        textStyle: {
          color: Xm
        }
      }
    },
    candlestick: {
      itemStyle: {
        normal: {
          color: "#FD1050",
          color0: "#0CF49B",
          borderColor: "#FD1050",
          borderColor0: "#0CF49B"
        }
      }
    }
  };
  Ym.categoryAxis.splitLine.show = !1,
  Rv.extend({
    type: "dataset",
    defaultOption: {
      seriesLayoutBy: Yv,
      sourceHeader: null,
      dimensions: null,
      source: null
    },
    optionUpdated: function() {
      ns(this)
    }
  }),
  Sm.extend({
    type: "dataset"
  });
  var jm = Jr.extend({
    type: "ellipse",
    shape: {
      cx: 0,
      cy: 0,
      rx: 0,
      ry: 0
    },
    buildPath: function(t, e) {
      var n = .5522848,
      i = e.cx,
      r = e.cy,
      a = e.rx,
      o = e.ry,
      s = a * n,
      l = o * n;
      t.moveTo(i - a, r),
      t.bezierCurveTo(i - a, r - l, i - s, r - o, i, r - o),
      t.bezierCurveTo(i + s, r - o, i + a, r - l, i + a, r),
      t.bezierCurveTo(i + a, r + l, i + s, r + o, i, r + o),
      t.bezierCurveTo(i - s, r + o, i - a, r + l, i - a, r),
      t.closePath()
    }
  }),
  Zm = /[\s,]+/;
  Ll.prototype.parse = function(t, e) {
    e = e || {};
    var n = Al(t);
    if (!n) throw new Error("Illegal svg");
    var i = new pd;
    this._root = i;
    var r = n.getAttribute("viewBox") || "",
    a = parseFloat(n.getAttribute("width") || e.width),
    o = parseFloat(n.getAttribute("height") || e.height);
    isNaN(a) && (a = null),
    isNaN(o) && (o = null),
    Bl(n, i, null, !0);
    for (var s = n.firstChild; s;) this._parseNode(s, i),
    s = s.nextSibling;
    var l, u;
    if (r) {
      var h = E(r).split(Zm);
      h.length >= 4 && (l = {
        x: parseFloat(h[0] || 0),
        y: parseFloat(h[1] || 0),
        width: parseFloat(h[2]),
        height: parseFloat(h[3])
      })
    }
    if (l && null != a && null != o && (u = Nl(l, a, o), !e.ignoreViewBox)) {
      var c = i;
      i = new pd,
      i.add(c),
      c.scale = u.scale.slice(),
      c.position = u.position.slice()
    }
    return e.ignoreRootClip || null == a || null == o || i.setClipPath(new Vg({
      shape: {
        x: 0,
        y: 0,
        width: a,
        height: o
      }
    })),
    {
      root: i,
      width: a,
      height: o,
      viewBoxRect: l,
      viewBoxTransform: u
    }
  },
  Ll.prototype._parseNode = function(t, e) {
    var n = t.nodeName.toLowerCase();
    "defs" === n ? this._isDefine = !0 : "text" === n && (this._isText = !0);
    var i;
    if (this._isDefine) {
      var r = Qm[n];
      if (r) {
        var a = r.call(this, t),
        o = t.getAttribute("id");
        o && (this._defs[o] = a)
      }
    } else {
      var r = $m[n];
      r && (i = r.call(this, t, e), e.add(i))
    }
    for (var s = t.firstChild; s;) 1 === s.nodeType && this._parseNode(s, i),
    3 === s.nodeType && this._isText && this._parseText(s, i),
    s = s.nextSibling;
    "defs" === n ? this._isDefine = !1 : "text" === n && (this._isText = !1)
  },
  Ll.prototype._parseText = function(t, e) {
    if (1 === t.nodeType) {
      var n = t.getAttribute("dx") || 0,
      i = t.getAttribute("dy") || 0;
      this._textX += parseFloat(n),
      this._textY += parseFloat(i)
    }
    var r = new Dg({
      style: {
        text: t.textContent,
        transformText: !0
      },
      position: [this._textX || 0, this._textY || 0]
    });
    Ol(e, r),
    Bl(t, r, this._defs);
    var a = r.style.fontSize;
    a && 9 > a && (r.style.fontSize = 9, r.scale = r.scale || [1, 1], r.scale[0] *= a / 9, r.scale[1] *= a / 9);
    var o = r.getBoundingRect();
    return this._textX += o.width,
    e.add(r),
    r
  };
  var $m = {
    g: function(t, e) {
      var n = new pd;
      return Ol(e, n),
      Bl(t, n, this._defs),
      n
    },
    rect: function(t, e) {
      var n = new Vg;
      return Ol(e, n),
      Bl(t, n, this._defs),
      n.setShape({
        x: parseFloat(t.getAttribute("x") || 0),
        y: parseFloat(t.getAttribute("y") || 0),
        width: parseFloat(t.getAttribute("width") || 0),
        height: parseFloat(t.getAttribute("height") || 0)
      }),
      n
    },
    circle: function(t, e) {
      var n = new Ag;
      return Ol(e, n),
      Bl(t, n, this._defs),
      n.setShape({
        cx: parseFloat(t.getAttribute("cx") || 0),
        cy: parseFloat(t.getAttribute("cy") || 0),
        r: parseFloat(t.getAttribute("r") || 0)
      }),
      n
    },
    line: function(t, e) {
      var n = new Gg;
      return Ol(e, n),
      Bl(t, n, this._defs),
      n.setShape({
        x1: parseFloat(t.getAttribute("x1") || 0),
        y1: parseFloat(t.getAttribute("y1") || 0),
        x2: parseFloat(t.getAttribute("x2") || 0),
        y2: parseFloat(t.getAttribute("y2") || 0)
      }),
      n
    },
    ellipse: function(t, e) {
      var n = new jm;
      return Ol(e, n),
      Bl(t, n, this._defs),
      n.setShape({
        cx: parseFloat(t.getAttribute("cx") || 0),
        cy: parseFloat(t.getAttribute("cy") || 0),
        rx: parseFloat(t.getAttribute("rx") || 0),
        ry: parseFloat(t.getAttribute("ry") || 0)
      }),
      n
    },
    polygon: function(t, e) {
      var n = t.getAttribute("points");
      n && (n = El(n));
      var i = new zg({
        shape: {
          points: n || []
        }
      });
      return Ol(e, i),
      Bl(t, i, this._defs),
      i
    },
    polyline: function(t, e) {
      var n = new Jr;
      Ol(e, n),
      Bl(t, n, this._defs);
      var i = t.getAttribute("points");
      i && (i = El(i));
      var r = new Fg({
        shape: {
          points: i || []
        }
      });
      return r
    },
    image: function(t, e) {
      var n = new Ci;
      return Ol(e, n),
      Bl(t, n, this._defs),
      n.setStyle({
        image: t.getAttribute("xlink:href"),
        x: t.getAttribute("x"),
        y: t.getAttribute("y"),
        width: t.getAttribute("width"),
        height: t.getAttribute("height")
      }),
      n
    },
    text: function(t, e) {
      var n = t.getAttribute("x") || 0,
      i = t.getAttribute("y") || 0,
      r = t.getAttribute("dx") || 0,
      a = t.getAttribute("dy") || 0;
      this._textX = parseFloat(n) + parseFloat(r),
      this._textY = parseFloat(i) + parseFloat(a);
      var o = new pd;
      return Ol(e, o),
      Bl(t, o, this._defs),
      o
    },
    tspan: function(t, e) {
      var n = t.getAttribute("x"),
      i = t.getAttribute("y");
      null != n && (this._textX = parseFloat(n)),
      null != i && (this._textY = parseFloat(i));
      var r = t.getAttribute("dx") || 0,
      a = t.getAttribute("dy") || 0,
      o = new pd;
      return Ol(e, o),
      Bl(t, o, this._defs),
      this._textX += r,
      this._textY += a,
      o
    },
    path: function(t, e) {
      var n = t.getAttribute("d") || "",
      i = ia(n);
      return Ol(e, i),
      Bl(t, i, this._defs),
      i
    }
  },
  Qm = {
    lineargradient: function(t) {
      var e = parseInt(t.getAttribute("x1") || 0, 10),
      n = parseInt(t.getAttribute("y1") || 0, 10),
      i = parseInt(t.getAttribute("x2") || 10, 10),
      r = parseInt(t.getAttribute("y2") || 0, 10),
      a = new Zg(e, n, i, r);
      return Pl(t, a),
      a
    },
    radialgradient: function() {}
  },
  Km = {
    fill: "fill",
    stroke: "stroke",
    "stroke-width": "lineWidth",
    opacity: "opacity",
    "fill-opacity": "fillOpacity",
    "stroke-opacity": "strokeOpacity",
    "stroke-dasharray": "lineDash",
    "stroke-dashoffset": "lineDashOffset",
    "stroke-linecap": "lineCap",
    "stroke-linejoin": "lineJoin",
    "stroke-miterlimit": "miterLimit",
    "font-family": "fontFamily",
    "font-size": "fontSize",
    "font-style": "fontStyle",
    "font-weight": "fontWeight",
    "text-align": "textAlign",
    "alignment-baseline": "textBaseline"
  },
  Jm = /url\(\s*#(.*?)\)/,
  ty = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,
  ey = /([^\s:;]+)\s*:\s*([^:;]+)/g,
  ny = F(),
  iy = {
    registerMap: function(t, e, n) {
      var i;
      return x(e) ? i = e: e.svg ? i = [{
        type: "svg",
        source: e.svg,
        specialAreas: e.specialAreas
      }] : (e.geoJson && !e.features && (n = e.specialAreas, e = e.geoJson), i = [{
        type: "geoJSON",
        source: e,
        specialAreas: n
      }]),
      d(i,
      function(t) {
        var e = t.type;
        "geoJson" === e && (e = t.type = "geoJSON");
        var n = ry[e];
        n(t)
      }),
      ny.set(t, i)
    },
    retrieveMap: function(t) {
      return ny.get(t)
    }
  },
  ry = {
    geoJSON: function(t) {
      var e = t.source;
      t.geoJSON = b(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")() : e
    },
    svg: function(t) {
      t.svgXML = Al(t.source)
    }
  },
  ay = O,
  oy = d,
  sy = w,
  ly = M,
  uy = Rv.parseClassType,
  hy = "4.8.0",
  cy = {
    zrender: "4.3.1"
  },
  fy = 1,
  dy = 1e3,
  py = 800,
  gy = 900,
  vy = 5e3,
  my = 1e3,
  yy = 1100,
  _y = 2e3,
  xy = 3e3,
  wy = 3500,
  by = 4e3,
  My = 5e3,
  Sy = {
    PROCESSOR: {
      FILTER: dy,
      SERIES_FILTER: py,
      STATISTIC: vy
    },
    VISUAL: {
      LAYOUT: my,
      PROGRESSIVE_LAYOUT: yy,
      GLOBAL: _y,
      CHART: xy,
      POST_CHART_LAYOUT: wy,
      COMPONENT: by,
      BRUSH: My
    }
  },
  Ty = "__flagInMainProcess",
  Cy = "__optionUpdated",
  ky = /^[a-zA-Z0-9_]+$/;
  Vl.prototype.on = Hl("on", !0),
  Vl.prototype.off = Hl("off", !0),
  Vl.prototype.one = Hl("one", !0),
  c(Vl, Mf);
  var Iy = Wl.prototype;
  Iy._onframe = function() {
    if (!this._disposed) {
      var t = this._scheduler;
      if (this[Cy]) {
        var e = this[Cy].silent;
        this[Ty] = !0,
        Xl(this),
        Dy.update.call(this),
        this[Ty] = !1,
        this[Cy] = !1,
        jl.call(this, e),
        Zl.call(this, e)
      } else if (t.unfinished) {
        var n = fy,
        i = this._model,
        r = this._api;
        t.unfinished = !1;
        do {
          var a = +new Date;
          t.performSeriesTasks(i), t.performDataProcessorTasks(i), Ul(this, i), t.performVisualTasks(i), eu(this, this._model, r, "remain"), n -= +new Date - a
        } while ( n > 0 && t . unfinished );
        t.unfinished || this._zr.flush()
      }
    }
  },
  Iy.getDom = function() {
    return this._dom
  },
  Iy.getZr = function() {
    return this._zr
  },
  Iy.setOption = function(t, e, n) {
    if (!this._disposed) {
      var i;
      if (ly(e) && (n = e.lazyUpdate, i = e.silent, e = e.notMerge), this[Ty] = !0, !this._model || e) {
        var r = new Ss(this._api),
        a = this._theme,
        o = this._model = new Kv;
        o.scheduler = this._scheduler,
        o.init(null, null, a, r)
      }
      this._model.setOption(t, Ey),
      n ? (this[Cy] = {
        silent: i
      },
      this[Ty] = !1) : (Xl(this), Dy.update.call(this), this._zr.flush(), this[Cy] = !1, this[Ty] = !1, jl.call(this, i), Zl.call(this, i))
    }
  },
  Iy.setTheme = function() {
    console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")
  },
  Iy.getModel = function() {
    return this._model
  },
  Iy.getOption = function() {
    return this._model && this._model.getOption()
  },
  Iy.getWidth = function() {
    return this._zr.getWidth()
  },
  Iy.getHeight = function() {
    return this._zr.getHeight()
  },
  Iy.getDevicePixelRatio = function() {
    return this._zr.painter.dpr || window.devicePixelRatio || 1
  },
  Iy.getRenderedCanvas = function(t) {
    if (tf.canvasSupported) {
      t = t || {},
      t.pixelRatio = t.pixelRatio || 1,
      t.backgroundColor = t.backgroundColor || this._model.get("backgroundColor");
      var e = this._zr;
      return e.painter.getRenderedCanvas(t)
    }
  },
  Iy.getSvgDataURL = function() {
    if (tf.svgSupported) {
      var t = this._zr,
      e = t.storage.getDisplayList();
      return d(e,
      function(t) {
        t.stopAnimation(!0)
      }),
      t.painter.toDataURL()
    }
  },
  Iy.getDataURL = function(t) {
    if (!this._disposed) {
      t = t || {};
      var e = t.excludeComponents,
      n = this._model,
      i = [],
      r = this;
      oy(e,
      function(t) {
        n.eachComponent({
          mainType: t
        },
        function(t) {
          var e = r._componentsMap[t.__viewId];
          e.group.ignore || (i.push(e), e.group.ignore = !0)
        })
      });
      var a = "svg" === this._zr.painter.getType() ? this.getSvgDataURL() : this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png"));
      return oy(i,
      function(t) {
        t.group.ignore = !1
      }),
      a
    }
  },
  Iy.getConnectedDataURL = function(t) {
    if (!this._disposed && tf.canvasSupported) {
      var e = "svg" === t.type,
      n = this.group,
      r = Math.min,
      a = Math.max,
      o = 1 / 0;
      if (Hy[n]) {
        var s = o,
        l = o,
        u = -o,
        h = -o,
        c = [],
        f = t && t.pixelRatio || 1;
        d(Ny,
        function(o) {
          if (o.group === n) {
            var f = e ? o.getZr().painter.getSvgDom().innerHTML: o.getRenderedCanvas(i(t)),
            d = o.getDom().getBoundingClientRect();
            s = r(d.left, s),
            l = r(d.top, l),
            u = a(d.right, u),
            h = a(d.bottom, h),
            c.push({
              dom: f,
              left: d.left,
              top: d.top
            })
          }
        }),
        s *= f,
        l *= f,
        u *= f,
        h *= f;
        var p = u - s,
        g = h - l,
        v = ff(),
        m = Yi(v, {
          renderer: e ? "svg": "canvas"
        });
        if (m.resize({
          width: p,
          height: g
        }), e) {
          var y = "";
          return oy(c,
          function(t) {
            var e = t.left - s,
            n = t.top - l;
            y += '<g transform="translate(' + e + "," + n + ')">' + t.dom + "</g>"
          }),
          m.painter.getSvgRoot().innerHTML = y,
          t.connectedBackgroundColor && m.painter.setBackgroundColor(t.connectedBackgroundColor),
          m.refreshImmediately(),
          m.painter.toDataURL()
        }
        return t.connectedBackgroundColor && m.add(new Vg({
          shape: {
            x: 0,
            y: 0,
            width: p,
            height: g
          },
          style: {
            fill: t.connectedBackgroundColor
          }
        })),
        oy(c,
        function(t) {
          var e = new Ci({
            style: {
              x: t.left * f - s,
              y: t.top * f - l,
              image: t.dom
            }
          });
          m.add(e)
        }),
        m.refreshImmediately(),
        v.toDataURL("image/" + (t && t.type || "png"))
      }
      return this.getDataURL(t)
    }
  },
  Iy.convertToPixel = _(Gl, "convertToPixel"),
  Iy.convertFromPixel = _(Gl, "convertFromPixel"),
  Iy.containPixel = function(t, e) {
    if (!this._disposed) {
      var n, i = this._model;
      return t = lr(i, t),
      d(t,
      function(t, i) {
        i.indexOf("Models") >= 0 && d(t,
        function(t) {
          var r = t.coordinateSystem;
          if (r && r.containPoint) n |= !!r.containPoint(e);
          else if ("seriesModels" === i) {
            var a = this._chartsMap[t.__viewId];
            a && a.containPoint && (n |= a.containPoint(e, t))
          }
        },
        this)
      },
      this),
      !!n
    }
  },
  Iy.getVisual = function(t, e) {
    var n = this._model;
    t = lr(n, t, {
      defaultMainType: "series"
    });
    var i = t.seriesModel,
    r = i.getData(),
    a = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside: t.hasOwnProperty("dataIndex") ? r.indexOfRawIndex(t.dataIndex) : null;
    return null != a ? r.getItemVisual(a, e) : r.getVisual(e)
  },
  Iy.getViewOfComponentModel = function(t) {
    return this._componentsMap[t.__viewId]
  },
  Iy.getViewOfSeriesModel = function(t) {
    return this._chartsMap[t.__viewId]
  };
  var Dy = {
    prepareAndUpdate: function(t) {
      Xl(this),
      Dy.update.call(this, t)
    },
    update: function(t) {
      var e = this._model,
      n = this._api,
      i = this._zr,
      r = this._coordSysMgr,
      a = this._scheduler;
      if (e) {
        a.restoreData(e, t),
        a.performSeriesTasks(e),
        r.create(e, n),
        a.performDataProcessorTasks(e, t),
        Ul(this, e),
        r.update(e, n),
        Kl(e),
        a.performVisualTasks(e, t),
        Jl(this, e, n, t);
        var o = e.get("backgroundColor") || "transparent";
        if (tf.canvasSupported) i.setBackgroundColor(o);
        else {
          var s = Ke(o);
          o = ln(s, "rgb"),
          0 === s[3] && (o = "transparent")
        }
        nu(e, n)
      }
    },
    updateTransform: function(t) {
      var e = this._model,
      n = this,
      i = this._api;
      if (e) {
        var r = [];
        e.eachComponent(function(a, o) {
          var s = n.getViewOfComponentModel(o);
          if (s && s.__alive) if (s.updateTransform) {
            var l = s.updateTransform(o, e, i, t);
            l && l.update && r.push(s)
          } else r.push(s)
        });
        var a = F();
        e.eachSeries(function(r) {
          var o = n._chartsMap[r.__viewId];
          if (o.updateTransform) {
            var s = o.updateTransform(r, e, i, t);
            s && s.update && a.set(r.uid, 1)
          } else a.set(r.uid, 1)
        }),
        Kl(e),
        this._scheduler.performVisualTasks(e, t, {
          setDirty: !0,
          dirtyMap: a
        }),
        eu(n, e, i, t, a),
        nu(e, this._api)
      }
    },
    updateView: function(t) {
      var e = this._model;
      e && (ul.markUpdateMethod(t, "updateView"), Kl(e), this._scheduler.performVisualTasks(e, t, {
        setDirty: !0
      }), Jl(this, this._model, this._api, t), nu(e, this._api))
    },
    updateVisual: function(t) {
      Dy.update.call(this, t)
    },
    updateLayout: function(t) {
      Dy.update.call(this, t)
    }
  };
  Iy.resize = function(t) {
    if (!this._disposed) {
      this._zr.resize(t);
      var e = this._model;
      if (this._loadingFX && this._loadingFX.resize(), e) {
        var n = e.resetOption("media"),
        i = t && t.silent;
        this[Ty] = !0,
        n && Xl(this),
        Dy.update.call(this),
        this[Ty] = !1,
        jl.call(this, i),
        Zl.call(this, i)
      }
    }
  },
  Iy.showLoading = function(t, e) {
    if (!this._disposed && (ly(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), Fy[t])) {
      var n = Fy[t](this._api, e),
      i = this._zr;
      this._loadingFX = n,
      i.add(n)
    }
  },
  Iy.hideLoading = function() {
    this._disposed || (this._loadingFX && this._zr.remove(this._loadingFX), this._loadingFX = null)
  },
  Iy.makeActionFromEvent = function(t) {
    var e = o({},
    t);
    return e.type = Py[t.type],
    e
  },
  Iy.dispatchAction = function(t, e) {
    if (!this._disposed && (ly(e) || (e = {
      silent: !!e
    }), Ly[t.type] && this._model)) {
      if (this[Ty]) return void this._pendingActions.push(t);
      Yl.call(this, t, e.silent),
      e.flush ? this._zr.flush(!0) : e.flush !== !1 && tf.browser.weChat && this._throttledZrFlush(),
      jl.call(this, e.silent),
      Zl.call(this, e.silent)
    }
  },
  Iy.appendData = function(t) {
    if (!this._disposed) {
      var e = t.seriesIndex,
      n = this.getModel(),
      i = n.getSeriesByIndex(e);
      i.appendData(t),
      this._scheduler.unfinished = !0
    }
  },
  Iy.on = Hl("on", !1),
  Iy.off = Hl("off", !1),
  Iy.one = Hl("one", !1);
  var Ay = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu"];
  Iy._initEvents = function() {
    oy(Ay,
    function(t) {
      var e = function(e) {
        var n, i = this.getModel(),
        r = e.target,
        a = "globalout" === t;
        if (a) n = {};
        else if (r && null != r.dataIndex) {
          var s = r.dataModel || i.getSeriesByIndex(r.seriesIndex);
          n = s && s.getDataParams(r.dataIndex, r.dataType, r) || {}
        } else r && r.eventData && (n = o({},
        r.eventData));
        if (n) {
          var l = n.componentType,
          u = n.componentIndex; ("markLine" === l || "markPoint" === l || "markArea" === l) && (l = "series", u = n.seriesIndex);
          var h = l && null != u && i.getComponent(l, u),
          c = h && this["series" === h.mainType ? "_chartsMap": "_componentsMap"][h.__viewId];
          n.event = e,
          n.type = t,
          this._ecEventProcessor.eventInfo = {
            targetEl: r,
            packedEvent: n,
            model: h,
            view: c
          },
          this.trigger(t, n)
        }
      };
      e.zrEventfulCallAtLast = !0,
      this._zr.on(t, e, this)
    },
    this),
    oy(Py,
    function(t, e) {
      this._messageCenter.on(e,
      function(t) {
        this.trigger(e, t)
      },
      this)
    },
    this)
  },
  Iy.isDisposed = function() {
    return this._disposed
  },
  Iy.clear = function() {
    this._disposed || this.setOption({
      series: []
    },
    !0)
  },
  Iy.dispose = function() {
    if (!this._disposed) {
      this._disposed = !0,
      hr(this.getDom(), Gy, "");
      var t = this._api,
      e = this._model;
      oy(this._componentsViews,
      function(n) {
        n.dispose(e, t)
      }),
      oy(this._chartsViews,
      function(n) {
        n.dispose(e, t)
      }),
      this._zr.dispose(),
      delete Ny[this.id]
    }
  },
  c(Wl, Mf),
  su.prototype = {
    constructor: su,
    normalizeQuery: function(t) {
      var e = {},
      n = {},
      i = {};
      if (b(t)) {
        var r = uy(t);
        e.mainType = r.main || null,
        e.subType = r.sub || null
      } else {
        var a = ["Index", "Name", "Id"],
        o = {
          name: 1,
          dataIndex: 1,
          dataType: 1
        };
        d(t,
        function(t, r) {
          for (var s = !1,
          l = 0; l < a.length; l++) {
            var u = a[l],
            h = r.lastIndexOf(u);
            if (h > 0 && h === r.length - u.length) {
              var c = r.slice(0, h);
              "data" !== c && (e.mainType = c, e[u.toLowerCase()] = t, s = !0)
            }
          }
          o.hasOwnProperty(r) && (n[r] = t, s = !0),
          s || (i[r] = t)
        })
      }
      return {
        cptQuery: e,
        dataQuery: n,
        otherQuery: i
      }
    },
    filter: function(t, e) {
      function n(t, e, n, i) {
        return null == t[n] || e[i || n] === t[n]
      }
      var i = this.eventInfo;
      if (!i) return ! 0;
      var r = i.targetEl,
      a = i.packedEvent,
      o = i.model,
      s = i.view;
      if (!o || !s) return ! 0;
      var l = e.cptQuery,
      u = e.dataQuery;
      return n(l, o, "mainType") && n(l, o, "subType") && n(l, o, "index", "componentIndex") && n(l, o, "name") && n(l, o, "id") && n(u, a, "name") && n(u, a, "dataIndex") && n(u, a, "dataType") && (!s.filterForExposedEvent || s.filterForExposedEvent(t, e.otherQuery, r, a))
    },
    afterTrigger: function() {
      this.eventInfo = null
    }
  };
  var Ly = {},
  Py = {},
  Oy = [],
  Ey = [],
  By = [],
  Ry = [],
  zy = {},
  Fy = {},
  Ny = {},
  Hy = {},
  Vy = new Date - 0,
  Wy = new Date - 0,
  Gy = "_echarts_instance_",
  Xy = cu;
  Mu(_y, Lm),
  vu(fm),
  mu(gy, dm),
  Tu("default", Bm),
  _u({
    type: "highlight",
    event: "highlight",
    update: "highlight"
  },
  H),
  _u({
    type: "downplay",
    event: "downplay",
    update: "downplay"
  },
  H),
  gu("light", Gm),
  gu("dark", Ym);
  var qy = {};
  Eu.prototype = {
    constructor: Eu,
    add: function(t) {
      return this._add = t,
      this
    },
    update: function(t) {
      return this._update = t,
      this
    },
    remove: function(t) {
      return this._remove = t,
      this
    },
    execute: function() {
      var t, e = this._old,
      n = this._new,
      i = {},
      r = {},
      a = [],
      o = [];
      for (Bu(e, i, a, "_oldKeyGetter", this), Bu(n, r, o, "_newKeyGetter", this), t = 0; t < e.length; t++) {
        var s = a[t],
        l = r[s];
        if (null != l) {
          var u = l.length;
          u ? (1 === u && (r[s] = null), l = l.shift()) : r[s] = null,
          this._update && this._update(l, t)
        } else this._remove && this._remove(t)
      }
      for (var t = 0; t < o.length; t++) {
        var s = o[t];
        if (r.hasOwnProperty(s)) {
          var l = r[s];
          if (null == l) continue;
          if (l.length) for (var h = 0,
          u = l.length; u > h; h++) this._add && this._add(l[h]);
          else this._add && this._add(l)
        }
      }
    }
  };
  var Uy = F(["tooltip", "label", "itemName", "itemId", "seriesName"]),
  Yy = M,
  jy = "undefined",
  Zy = -1,
  $y = "e\x00\x00",
  Qy = {
    "float": typeof Float64Array === jy ? Array: Float64Array,
    "int": typeof Int32Array === jy ? Array: Int32Array,
    ordinal: Array,
    number: Array,
    time: Array
  },
  Ky = typeof Uint32Array === jy ? Array: Uint32Array,
  Jy = typeof Int32Array === jy ? Array: Int32Array,
  t_ = typeof Uint16Array === jy ? Array: Uint16Array,
  e_ = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount", "_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx"],
  n_ = ["_extent", "_approximateExtent", "_rawExtent"],
  i_ = function(t, e) {
    t = t || ["x", "y"];
    for (var n = {},
    i = [], r = {},
    a = 0; a < t.length; a++) {
      var o = t[a];
      b(o) ? o = new Hu({
        name: o
      }) : o instanceof Hu || (o = new Hu(o));
      var s = o.name;
      o.type = o.type || "float",
      o.coordDim || (o.coordDim = s, o.coordDimIndex = 0),
      o.otherDims = o.otherDims || {},
      i.push(s),
      n[s] = o,
      o.index = a,
      o.createInvertedIndices && (r[s] = [])
    }
    this.dimensions = i,
    this._dimensionInfos = n,
    this.hostModel = e,
    this.dataType,
    this._indices = null,
    this._count = 0,
    this._rawCount = 0,
    this._storage = {},
    this._nameList = [],
    this._idList = [],
    this._optionModels = [],
    this._visual = {},
    this._layout = {},
    this._itemVisuals = [],
    this.hasItemVisual = {},
    this._itemLayouts = [],
    this._graphicEls = [],
    this._chunkSize = 1e5,
    this._chunkCount = 0,
    this._rawData,
    this._rawExtent = {},
    this._extent = {},
    this._approximateExtent = {},
    this._dimensionsSummary = Ru(this),
    this._invertedIndicesMap = r,
    this._calculationInfo = {},
    this.userOutput = this._dimensionsSummary.userOutput
  },
  r_ = i_.prototype;
  r_.type = "list",
  r_.hasItemOption = !0,
  r_.getDimension = function(t) {
    return ("number" == typeof t || !isNaN(t) && !this._dimensionInfos.hasOwnProperty(t)) && (t = this.dimensions[t]),
    t
  },
  r_.getDimensionInfo = function(t) {
    return this._dimensionInfos[this.getDimension(t)]
  },
  r_.getDimensionsOnCoord = function() {
    return this._dimensionsSummary.dataDimsOnCoord.slice()
  },
  r_.mapDimension = function(t, e) {
    var n = this._dimensionsSummary;
    if (null == e) return n.encodeFirstDimNotExtra[t];
    var i = n.encode[t];
    return e === !0 ? (i || []).slice() : i && i[e]
  },
  r_.initData = function(t, e, n) {
    var i = es.isInstance(t) || f(t);
    i && (t = new Ws(t, this.dimensions.length)),
    this._rawData = t,
    this._storage = {},
    this._indices = null,
    this._nameList = e || [],
    this._idList = [],
    this._nameRepeatCount = {},
    n || (this.hasItemOption = !1),
    this.defaultDimValueGetter = mm[this._rawData.getSource().sourceFormat],
    this._dimValueGetter = n = n || this.defaultDimValueGetter,
    this._dimValueGetterArrayRows = mm.arrayRows,
    this._rawExtent = {},
    this._initDataFromProvider(0, t.count()),
    t.pure && (this.hasItemOption = !1)
  },
  r_.getProvider = function() {
    return this._rawData
  },
  r_.appendData = function(t) {
    var e = this._rawData,
    n = this.count();
    e.appendData(t);
    var i = e.count();
    e.persistent || (i += n),
    this._initDataFromProvider(n, i)
  },
  r_.appendValues = function(t, e) {
    for (var n = this._chunkSize,
    i = this._storage,
    r = this.dimensions,
    a = r.length,
    o = this._rawExtent,
    s = this.count(), l = s + Math.max(t.length, e ? e.length: 0), u = this._chunkCount, h = 0; a > h; h++) {
      var c = r[h];
      o[c] || (o[c] = Ju()),
      i[c] || (i[c] = []),
      Xu(i, this._dimensionInfos[c], n, u, l),
      this._chunkCount = i[c].length
    }
    for (var f = new Array(a), d = s; l > d; d++) {
      for (var p = d - s,
      g = Math.floor(d / n), v = d % n, m = 0; a > m; m++) {
        var c = r[m],
        y = this._dimValueGetterArrayRows(t[p] || f, c, p, m);
        i[c][g][v] = y;
        var _ = o[c];
        y < _[0] && (_[0] = y),
        y > _[1] && (_[1] = y)
      }
      e && (this._nameList[d] = e[p])
    }
    this._rawCount = this._count = l,
    this._extent = {},
    qu(this)
  },
  r_._initDataFromProvider = function(t, e) {
    if (! (t >= e)) {
      for (var n, i = this._chunkSize,
      r = this._rawData,
      a = this._storage,
      o = this.dimensions,
      s = o.length,
      l = this._dimensionInfos,
      u = this._nameList,
      h = this._idList,
      c = this._rawExtent,
      f = this._nameRepeatCount = {},
      d = this._chunkCount,
      p = 0; s > p; p++) {
        var g = o[p];
        c[g] || (c[g] = Ju());
        var v = l[g];
        0 === v.otherDims.itemName && (n = this._nameDimIdx = p),
        0 === v.otherDims.itemId && (this._idDimIdx = p),
        a[g] || (a[g] = []),
        Xu(a, v, i, d, e),
        this._chunkCount = a[g].length
      }
      for (var m = new Array(s), y = t; e > y; y++) {
        m = r.getItem(y, m);
        for (var _ = Math.floor(y / i), x = y % i, w = 0; s > w; w++) {
          var g = o[w],
          b = a[g][_],
          M = this._dimValueGetter(m, g, y, w);
          b[x] = M;
          var S = c[g];
          M < S[0] && (S[0] = M),
          M > S[1] && (S[1] = M)
        }
        if (!r.pure) {
          var T = u[y];
          if (m && null == T) if (null != m.name) u[y] = T = m.name;
          else if (null != n) {
            var C = o[n],
            k = a[C][_];
            if (k) {
              T = k[x];
              var I = l[C].ordinalMeta;
              I && I.categories.length && (T = I.categories[T])
            }
          }
          var D = null == m ? null: m.id;
          null == D && null != T && (f[T] = f[T] || 0, D = T, f[T] > 0 && (D += "__ec__" + f[T]), f[T]++),
          null != D && (h[y] = D)
        }
      } ! r.persistent && r.clean && r.clean(),
      this._rawCount = this._count = e,
      this._extent = {},
      qu(this)
    }
  },
  r_.count = function() {
    return this._count
  },
  r_.getIndices = function() {
    var t, e = this._indices;
    if (e) {
      var n = e.constructor,
      i = this._count;
      if (n === Array) {
        t = new n(i);
        for (var r = 0; i > r; r++) t[r] = e[r]
      } else t = new n(e.buffer, 0, i)
    } else for (var n = Vu(this), t = new n(this.count()), r = 0; r < t.length; r++) t[r] = r;
    return t
  },
  r_.get = function(t, e) {
    if (! (e >= 0 && e < this._count)) return 0 / 0;
    var n = this._storage;
    if (!n[t]) return 0 / 0;
    e = this.getRawIndex(e);
    var i = Math.floor(e / this._chunkSize),
    r = e % this._chunkSize,
    a = n[t][i],
    o = a[r];
    return o
  },
  r_.getByRawIndex = function(t, e) {
    if (! (e >= 0 && e < this._rawCount)) return 0 / 0;
    var n = this._storage[t];
    if (!n) return 0 / 0;
    var i = Math.floor(e / this._chunkSize),
    r = e % this._chunkSize,
    a = n[i];
    return a[r]
  },
  r_._getFast = function(t, e) {
    var n = Math.floor(e / this._chunkSize),
    i = e % this._chunkSize,
    r = this._storage[t][n];
    return r[i]
  },
  r_.getValues = function(t, e) {
    var n = [];
    x(t) || (e = t, t = this.dimensions);
    for (var i = 0,
    r = t.length; r > i; i++) n.push(this.get(t[i], e));
    return n
  },
  r_.hasValue = function(t) {
    for (var e = this._dimensionsSummary.dataDimsOnCoord,
    n = 0,
    i = e.length; i > n; n++) if (isNaN(this.get(e[n], t))) return ! 1;
    return ! 0
  },
  r_.getDataExtent = function(t) {
    t = this.getDimension(t);
    var e = this._storage[t],
    n = Ju();
    if (!e) return n;
    var i, r = this.count(),
    a = !this._indices;
    if (a) return this._rawExtent[t].slice();
    if (i = this._extent[t]) return i.slice();
    i = n;
    for (var o = i[0], s = i[1], l = 0; r > l; l++) {
      var u = this._getFast(t, this.getRawIndex(l));
      o > u && (o = u),
      u > s && (s = u)
    }
    return i = [o, s],
    this._extent[t] = i,
    i
  },
  r_.getApproximateExtent = function(t) {
    return t = this.getDimension(t),
    this._approximateExtent[t] || this.getDataExtent(t)
  },
  r_.setApproximateExtent = function(t, e) {
    e = this.getDimension(e),
    this._approximateExtent[e] = t.slice()
  },
  r_.getCalculationInfo = function(t) {
    return this._calculationInfo[t]
  },
  r_.setCalculationInfo = function(t, e) {
    Yy(t) ? o(this._calculationInfo, t) : this._calculationInfo[t] = e
  },
  r_.getSum = function(t) {
    var e = this._storage[t],
    n = 0;
    if (e) for (var i = 0,
    r = this.count(); r > i; i++) {
      var a = this.get(t, i);
      isNaN(a) || (n += a)
    }
    return n
  },
  r_.getMedian = function(t) {
    var e = [];
    this.each(t,
    function(t) {
      isNaN(t) || e.push(t)
    });
    var n = [].concat(e).sort(function(t, e) {
      return t - e
    }),
    i = this.count();
    return 0 === i ? 0 : i % 2 === 1 ? n[(i - 1) / 2] : (n[i / 2] + n[i / 2 - 1]) / 2
  },
  r_.rawIndexOf = function(t, e) {
    var n = t && this._invertedIndicesMap[t],
    i = n[e];
    return null == i || isNaN(i) ? Zy: i
  },
  r_.indexOfName = function(t) {
    for (var e = 0,
    n = this.count(); n > e; e++) if (this.getName(e) === t) return e;
    return - 1
  },
  r_.indexOfRawIndex = function(t) {
    if (t >= this._rawCount || 0 > t) return - 1;
    if (!this._indices) return t;
    var e = this._indices,
    n = e[t];
    if (null != n && n < this._count && n === t) return t;
    for (var i = 0,
    r = this._count - 1; r >= i;) {
      var a = (i + r) / 2 | 0;
      if (e[a] < t) i = a + 1;
      else {
        if (! (e[a] > t)) return a;
        r = a - 1
      }
    }
    return - 1
  },
  r_.indicesOfNearest = function(t, e, n) {
    var i = this._storage,
    r = i[t],
    a = [];
    if (!r) return a;
    null == n && (n = 1 / 0);
    for (var o = 1 / 0,
    s = -1,
    l = 0,
    u = 0,
    h = this.count(); h > u; u++) {
      var c = e - this.get(t, u),
      f = Math.abs(c);
      n >= f && ((o > f || f === o && c >= 0 && 0 > s) && (o = f, s = c, l = 0), c === s && (a[l++] = u))
    }
    return a.length = l,
    a
  },
  r_.getRawIndex = Yu,
  r_.getRawDataItem = function(t) {
    if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t));
    for (var e = [], n = 0; n < this.dimensions.length; n++) {
      var i = this.dimensions[n];
      e.push(this.get(i, t))
    }
    return e
  },
  r_.getName = function(t) {
    var e = this.getRawIndex(t);
    return this._nameList[e] || Uu(this, this._nameDimIdx, e) || ""
  },
  r_.getId = function(t) {
    return Zu(this, this.getRawIndex(t))
  },
  r_.each = function(t, e, n, i) {
    if (this._count) {
      "function" == typeof t && (i = n, n = e, e = t, t = []),
      n = n || i || this,
      t = p($u(t), this.getDimension, this);
      for (var r = t.length,
      a = 0; a < this.count(); a++) switch (r) {
      case 0:
        e.call(n, a);
        break;
      case 1:
        e.call(n, this.get(t[0], a), a);
        break;
      case 2:
        e.call(n, this.get(t[0], a), this.get(t[1], a), a);
        break;
      default:
        for (var o = 0,
        s = []; r > o; o++) s[o] = this.get(t[o], a);
        s[o] = a,
        e.apply(n, s)
      }
    }
  },
  r_.filterSelf = function(t, e, n, i) {
    if (this._count) {
      "function" == typeof t && (i = n, n = e, e = t, t = []),
      n = n || i || this,
      t = p($u(t), this.getDimension, this);
      for (var r = this.count(), a = Vu(this), o = new a(r), s = [], l = t.length, u = 0, h = t[0], c = 0; r > c; c++) {
        var f, d = this.getRawIndex(c);
        if (0 === l) f = e.call(n, c);
        else if (1 === l) {
          var g = this._getFast(h, d);
          f = e.call(n, g, c)
        } else {
          for (var v = 0; l > v; v++) s[v] = this._getFast(h, d);
          s[v] = c,
          f = e.apply(n, s)
        }
        f && (o[u++] = d)
      }
      return r > u && (this._indices = o),
      this._count = u,
      this._extent = {},
      this.getRawIndex = this._indices ? ju: Yu,
      this
    }
  },
  r_.selectRange = function(t) {
    if (this._count) {
      var e = [];
      for (var n in t) t.hasOwnProperty(n) && e.push(n);
      var i = e.length;
      if (i) {
        var r = this.count(),
        a = Vu(this),
        o = new a(r),
        s = 0,
        l = e[0],
        u = t[l][0],
        h = t[l][1],
        c = !1;
        if (!this._indices) {
          var f = 0;
          if (1 === i) {
            for (var d = this._storage[e[0]], p = 0; p < this._chunkCount; p++) for (var g = d[p], v = Math.min(this._count - p * this._chunkSize, this._chunkSize), m = 0; v > m; m++) {
              var y = g[m]; (y >= u && h >= y || isNaN(y)) && (o[s++] = f),
              f++
            }
            c = !0
          } else if (2 === i) {
            for (var d = this._storage[l], _ = this._storage[e[1]], x = t[e[1]][0], w = t[e[1]][1], p = 0; p < this._chunkCount; p++) for (var g = d[p], b = _[p], v = Math.min(this._count - p * this._chunkSize, this._chunkSize), m = 0; v > m; m++) {
              var y = g[m],
              M = b[m]; (y >= u && h >= y || isNaN(y)) && (M >= x && w >= M || isNaN(M)) && (o[s++] = f),
              f++
            }
            c = !0
          }
        }
        if (!c) if (1 === i) for (var m = 0; r > m; m++) {
          var S = this.getRawIndex(m),
          y = this._getFast(l, S); (y >= u && h >= y || isNaN(y)) && (o[s++] = S)
        } else for (var m = 0; r > m; m++) {
          for (var T = !0,
          S = this.getRawIndex(m), p = 0; i > p; p++) {
            var C = e[p],
            y = this._getFast(n, S); (y < t[C][0] || y > t[C][1]) && (T = !1)
          }
          T && (o[s++] = this.getRawIndex(m))
        }
        return r > s && (this._indices = o),
        this._count = s,
        this._extent = {},
        this.getRawIndex = this._indices ? ju: Yu,
        this
      }
    }
  },
  r_.mapArray = function(t, e, n, i) {
    "function" == typeof t && (i = n, n = e, e = t, t = []),
    n = n || i || this;
    var r = [];
    return this.each(t,
    function() {
      r.push(e && e.apply(this, arguments))
    },
    n),
    r
  },
  r_.map = function(t, e, n, i) {
    n = n || i || this,
    t = p($u(t), this.getDimension, this);
    var r = Qu(this, t);
    r._indices = this._indices,
    r.getRawIndex = r._indices ? ju: Yu;
    for (var a = r._storage,
    o = [], s = this._chunkSize, l = t.length, u = this.count(), h = [], c = r._rawExtent, f = 0; u > f; f++) {
      for (var d = 0; l > d; d++) h[d] = this.get(t[d], f);
      h[l] = f;
      var g = e && e.apply(n, h);
      if (null != g) {
        "object" != typeof g && (o[0] = g, g = o);
        for (var v = this.getRawIndex(f), m = Math.floor(v / s), y = v % s, _ = 0; _ < g.length; _++) {
          var x = t[_],
          w = g[_],
          b = c[x],
          M = a[x];
          M && (M[m][y] = w),
          w < b[0] && (b[0] = w),
          w > b[1] && (b[1] = w)
        }
      }
    }
    return r
  },
  r_.downSample = function(t, e, n, i) {
    for (var r = Qu(this, [t]), a = r._storage, o = [], s = Math.floor(1 / e), l = a[t], u = this.count(), h = this._chunkSize, c = r._rawExtent[t], f = new(Vu(this))(u), d = 0, p = 0; u > p; p += s) {
      s > u - p && (s = u - p, o.length = s);
      for (var g = 0; s > g; g++) {
        var v = this.getRawIndex(p + g),
        m = Math.floor(v / h),
        y = v % h;
        o[g] = l[m][y]
      }
      var _ = n(o),
      x = this.getRawIndex(Math.min(p + i(o, _) || 0, u - 1)),
      w = Math.floor(x / h),
      b = x % h;
      l[w][b] = _,
      _ < c[0] && (c[0] = _),
      _ > c[1] && (c[1] = _),
      f[d++] = x
    }
    return r._count = d,
    r._indices = f,
    r.getRawIndex = ju,
    r
  },
  r_.getItemModel = function(t) {
    var e = this.hostModel;
    return new co(this.getRawDataItem(t), e, e && e.ecModel)
  },
  r_.diff = function(t) {
    var e = this;
    return new Eu(t ? t.getIndices() : [], this.getIndices(),
    function(e) {
      return Zu(t, e)
    },
    function(t) {
      return Zu(e, t)
    })
  },
  r_.getVisual = function(t) {
    var e = this._visual;
    return e && e[t]
  },
  r_.setVisual = function(t, e) {
    if (Yy(t)) for (var n in t) t.hasOwnProperty(n) && this.setVisual(n, t[n]);
    else this._visual = this._visual || {},
    this._visual[t] = e
  },
  r_.setLayout = function(t, e) {
    if (Yy(t)) for (var n in t) t.hasOwnProperty(n) && this.setLayout(n, t[n]);
    else this._layout[t] = e
  },
  r_.getLayout = function(t) {
    return this._layout[t]
  },
  r_.getItemLayout = function(t) {
    return this._itemLayouts[t]
  },
  r_.setItemLayout = function(t, e, n) {
    this._itemLayouts[t] = n ? o(this._itemLayouts[t] || {},
    e) : e
  },
  r_.clearItemLayouts = function() {
    this._itemLayouts.length = 0
  },
  r_.getItemVisual = function(t, e, n) {
    var i = this._itemVisuals[t],
    r = i && i[e];
    return null != r || n ? r: this.getVisual(e)
  },
  r_.setItemVisual = function(t, e, n) {
    var i = this._itemVisuals[t] || {},
    r = this.hasItemVisual;
    if (this._itemVisuals[t] = i, Yy(e)) for (var a in e) e.hasOwnProperty(a) && (i[a] = e[a], r[a] = !0);
    else i[e] = n,
    r[e] = !0
  },
  r_.clearAllVisual = function() {
    this._visual = {},
    this._itemVisuals = [],
    this.hasItemVisual = {}
  };
  var a_ = function(t) {
    t.seriesIndex = this.seriesIndex,
    t.dataIndex = this.dataIndex,
    t.dataType = this.dataType
  };
  r_.setItemGraphicEl = function(t, e) {
    var n = this.hostModel;
    e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = n && n.seriesIndex, "group" === e.type && e.traverse(a_, e)),
    this._graphicEls[t] = e
  },
  r_.getItemGraphicEl = function(t) {
    return this._graphicEls[t]
  },
  r_.eachItemGraphicEl = function(t, e) {
    d(this._graphicEls,
    function(n, i) {
      n && t && t.call(e, n, i)
    })
  },
  r_.cloneShallow = function(t) {
    if (!t) {
      var e = p(this.dimensions, this.getDimensionInfo, this);
      t = new i_(e, this.hostModel)
    }
    if (t._storage = this._storage, Gu(t, this), this._indices) {
      var n = this._indices.constructor;
      t._indices = new n(this._indices)
    } else t._indices = null;
    return t.getRawIndex = t._indices ? ju: Yu,
    t
  },
  r_.wrapMethod = function(t, e) {
    var n = this[t];
    "function" == typeof n && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[t] = function() {
      var t = n.apply(this, arguments);
      return e.apply(this, [t].concat(L(arguments)))
    })
  },
  r_.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"],
  r_.CHANGABLE_METHODS = ["filterSelf", "selectRange"];
  var o_ = function(t, e) {
    return e = e || {},
    th(e.coordDimensions || [], t, {
      dimsDef: e.dimensionsDefine || t.dimensionsDefine,
      encodeDef: e.encodeDefine || t.encodeDefine,
      dimCount: e.dimensionsCount,
      encodeDefaulter: e.encodeDefaulter,
      generateCoord: e.generateCoord,
      generateCoordCount: e.generateCoordCount
    })
  },
  s_ = {
    cartesian2d: function(t, e, n, i) {
      var r = t.getReferringComponents("xAxis")[0],
      a = t.getReferringComponents("yAxis")[0];
      e.coordSysDims = ["x", "y"],
      n.set("x", r),
      n.set("y", a),
      ah(r) && (i.set("x", r), e.firstCategoryDimIndex = 0),
      ah(a) && (i.set("y", a), null == e.firstCategoryDimIndex & (e.firstCategoryDimIndex = 1))
    },
    singleAxis: function(t, e, n, i) {
      var r = t.getReferringComponents("singleAxis")[0];
      e.coordSysDims = ["single"],
      n.set("single", r),
      ah(r) && (i.set("single", r), e.firstCategoryDimIndex = 0)
    },
    polar: function(t, e, n, i) {
      var r = t.getReferringComponents("polar")[0],
      a = r.findAxisModel("radiusAxis"),
      o = r.findAxisModel("angleAxis");
      e.coordSysDims = ["radius", "angle"],
      n.set("radius", a),
      n.set("angle", o),
      ah(a) && (i.set("radius", a), e.firstCategoryDimIndex = 0),
      ah(o) && (i.set("angle", o), null == e.firstCategoryDimIndex && (e.firstCategoryDimIndex = 1))
    },
    geo: function(t, e) {
      e.coordSysDims = ["lng", "lat"]
    },
    parallel: function(t, e, n, i) {
      var r = t.ecModel,
      a = r.getComponent("parallel", t.get("parallelIndex")),
      o = e.coordSysDims = a.dimensions.slice();
      d(a.parallelAxisIndex,
      function(t, a) {
        var s = r.getComponent("parallelAxis", t),
        l = o[a];
        n.set(l, s),
        ah(s) && null == e.firstCategoryDimIndex && (i.set(l, s), e.firstCategoryDimIndex = a)
      })
    }
  };
  fh.prototype.parse = function(t) {
    return t
  },
  fh.prototype.getSetting = function(t) {
    return this._setting[t]
  },
  fh.prototype.contain = function(t) {
    var e = this._extent;
    return t >= e[0] && t <= e[1]
  },
  fh.prototype.normalize = function(t) {
    var e = this._extent;
    return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0])
  },
  fh.prototype.scale = function(t) {
    var e = this._extent;
    return t * (e[1] - e[0]) + e[0]
  },
  fh.prototype.unionExtent = function(t) {
    var e = this._extent;
    t[0] < e[0] && (e[0] = t[0]),
    t[1] > e[1] && (e[1] = t[1])
  },
  fh.prototype.unionExtentFromData = function(t, e) {
    this.unionExtent(t.getApproximateExtent(e))
  },
  fh.prototype.getExtent = function() {
    return this._extent.slice()
  },
  fh.prototype.setExtent = function(t, e) {
    var n = this._extent;
    isNaN(t) || (n[0] = t),
    isNaN(e) || (n[1] = e)
  },
  fh.prototype.isBlank = function() {
    return this._isBlank
  },
  fh.prototype.setBlank = function(t) {
    this._isBlank = t
  },
  fh.prototype.getLabel = null,
  gr(fh),
  _r(fh, {
    registerWhenExtend: !0
  }),
  dh.createByAxisModel = function(t) {
    var e = t.option,
    n = e.data,
    i = n && p(n, gh);
    return new dh({
      categories: i,
      needCollect: !i,
      deduplication: e.dedplication !== !1
    })
  };
  var l_ = dh.prototype;
  l_.getOrdinal = function(t) {
    return ph(this).get(t)
  },
  l_.parseAndCollect = function(t) {
    var e, n = this._needCollect;
    if ("string" != typeof t && !n) return t;
    if (n && !this._deduplication) return e = this.categories.length,
    this.categories[e] = t,
    e;
    var i = ph(this);
    return e = i.get(t),
    null == e && (n ? (e = this.categories.length, this.categories[e] = t, i.set(t, e)) : e = 0 / 0),
    e
  };
  var u_ = fh.prototype,
  h_ = fh.extend({
    type: "ordinal",
    init: function(t, e) { (!t || x(t)) && (t = new dh({
        categories: t
      })),
      this._ordinalMeta = t,
      this._extent = e || [0, t.categories.length - 1]
    },
    parse: function(t) {
      return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t)
    },
    contain: function(t) {
      return t = this.parse(t),
      u_.contain.call(this, t) && null != this._ordinalMeta.categories[t]
    },
    normalize: function(t) {
      return u_.normalize.call(this, this.parse(t))
    },
    scale: function(t) {
      return Math.round(u_.scale.call(this, t))
    },
    getTicks: function() {
      for (var t = [], e = this._extent, n = e[0]; n <= e[1];) t.push(n),
      n++;
      return t
    },
    getLabel: function(t) {
      return this.isBlank() ? void 0 : this._ordinalMeta.categories[t]
    },
    count: function() {
      return this._extent[1] - this._extent[0] + 1
    },
    unionExtentFromData: function(t, e) {
      this.unionExtent(t.getApproximateExtent(e))
    },
    getOrdinalMeta: function() {
      return this._ordinalMeta
    },
    niceTicks: H,
    niceExtent: H
  });
  h_.create = function() {
    return new h_
  };
  var c_ = wo,
  f_ = wo,
  d_ = fh.extend({
    type: "interval",
    _interval: 0,
    _intervalPrecision: 2,
    setExtent: function(t, e) {
      var n = this._extent;
      isNaN(t) || (n[0] = parseFloat(t)),
      isNaN(e) || (n[1] = parseFloat(e))
    },
    unionExtent: function(t) {
      var e = this._extent;
      t[0] < e[0] && (e[0] = t[0]),
      t[1] > e[1] && (e[1] = t[1]),
      d_.prototype.setExtent.call(this, e[0], e[1])
    },
    getInterval: function() {
      return this._interval
    },
    setInterval: function(t) {
      this._interval = t,
      this._niceExtent = this._extent.slice(),
      this._intervalPrecision = mh(t)
    },
    getTicks: function(t) {
      var e = this._interval,
      n = this._extent,
      i = this._niceExtent,
      r = this._intervalPrecision,
      a = [];
      if (!e) return a;
      var o = 1e4;
      n[0] < i[0] && a.push(t ? f_(i[0] - e, r) : n[0]);
      for (var s = i[0]; s <= i[1] && (a.push(s), s = f_(s + e, r), s !== a[a.length - 1]);) if (a.length > o) return [];
      var l = a.length ? a[a.length - 1] : i[1];
      return n[1] > l && a.push(t ? f_(l + e, r) : n[1]),
      a
    },
    getMinorTicks: function(t) {
      for (var e = this.getTicks(!0), n = [], i = this.getExtent(), r = 1; r < e.length; r++) {
        for (var a = e[r], o = e[r - 1], s = 0, l = [], u = a - o, h = u / t; t - 1 > s;) {
          var c = wo(o + (s + 1) * h);
          c > i[0] && c < i[1] && l.push(c),
          s++
        }
        n.push(l)
      }
      return n
    },
    getLabel: function(t, e) {
      if (null == t) return "";
      var n = e && e.precision;
      return null == n ? n = So(t) || 0 : "auto" === n && (n = this._intervalPrecision),
      t = f_(t, n, !0),
      Ro(t)
    },
    niceTicks: function(t, e, n) {
      t = t || 5;
      var i = this._extent,
      r = i[1] - i[0];
      if (isFinite(r)) {
        0 > r && (r = -r, i.reverse());
        var a = vh(i, t, e, n);
        this._intervalPrecision = a.intervalPrecision,
        this._interval = a.interval,
        this._niceExtent = a.niceTickExtent
      }
    },
    niceExtent: function(t) {
      var e = this._extent;
      if (e[0] === e[1]) if (0 !== e[0]) {
        var n = e[0];
        t.fixMax ? e[0] -= n / 2 : (e[1] += n / 2, e[0] -= n / 2)
      } else e[1] = 1;
      var i = e[1] - e[0];
      isFinite(i) || (e[0] = 0, e[1] = 1),
      this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
      var r = this._interval;
      t.fixMin || (e[0] = f_(Math.floor(e[0] / r) * r)),
      t.fixMax || (e[1] = f_(Math.ceil(e[1] / r) * r))
    }
  });
  d_.create = function() {
    return new d_
  };
  var p_ = "__ec_stack_",
  g_ = .5,
  v_ = "undefined" != typeof Float32Array ? Float32Array: Array,
  m_ = ({
    seriesType: "bar",
    plan: Cm(),
    reset: function(t) {
      function e(t, e) {
        for (var n, f = t.count,
        d = new v_(2 * f), p = new v_(2 * f), g = new v_(f), v = [], m = [], y = 0, _ = 0; null != (n = t.next());) m[h] = e.get(s, n),
        m[1 - h] = e.get(l, n),
        v = i.dataToPoint(m, null, v),
        p[y] = u ? r.x + r.width: v[0],
        d[y++] = v[0],
        p[y] = u ? v[1] : r.y + r.height,
        d[y++] = v[1],
        g[_++] = n;
        e.setLayout({
          largePoints: d,
          largeDataIndices: g,
          largeBackgroundPoints: p,
          barWidth: c,
          valueAxisStart: Dh(a, o, !1),
          backgroundStart: u ? r.x: r.y,
          valueAxisHorizontal: u
        })
      }
      if (kh(t) && Ih(t)) {
        var n = t.getData(),
        i = t.coordinateSystem,
        r = i.grid.getRect(),
        a = i.getBaseAxis(),
        o = i.getOtherAxis(a),
        s = n.mapDimension(o.dim),
        l = n.mapDimension(a.dim),
        u = o.isHorizontal(),
        h = u ? 0 : 1,
        c = Ch(Sh([t]), a, t).width;
        return c > g_ || (c = g_),
        {
          progress: e
        }
      }
    }
  },
  d_.prototype),
  y_ = Math.ceil,
  __ = Math.floor,
  x_ = 1e3,
  w_ = 60 * x_,
  b_ = 60 * w_,
  M_ = 24 * b_,
  S_ = function(t, e, n, i) {
    for (; i > n;) {
      var r = n + i >>> 1;
      t[r][1] < e ? n = r + 1 : i = r
    }
    return n
  },
  T_ = d_.extend({
    type: "time",
    getLabel: function(t) {
      var e = this._stepLvl,
      n = new Date(t);
      return Go(e[0], n, this.getSetting("useUTC"))
    },
    niceExtent: function(t) {
      var e = this._extent;
      if (e[0] === e[1] && (e[0] -= M_, e[1] += M_), e[1] === -1 / 0 && 1 / 0 === e[0]) {
        var n = new Date;
        e[1] = +new Date(n.getFullYear(), n.getMonth(), n.getDate()),
        e[0] = e[1] - M_
      }
      this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
      var i = this._interval;
      t.fixMin || (e[0] = wo(__(e[0] / i) * i)),
      t.fixMax || (e[1] = wo(y_(e[1] / i) * i))
    },
    niceTicks: function(t, e, n) {
      t = t || 10;
      var i = this._extent,
      r = i[1] - i[0],
      a = r / t;
      null != e && e > a && (a = e),
      null != n && a > n && (a = n);
      var o = C_.length,
      s = S_(C_, a, 0, o),
      l = C_[Math.min(s, o - 1)],
      u = l[1];
      if ("year" === l[0]) {
        var h = r / u,
        c = Po(h / t, !0);
        u *= c
      }
      var f = this.getSetting("useUTC") ? 0 : 60 * new Date( + i[0] || +i[1]).getTimezoneOffset() * 1e3,
      d = [Math.round(y_((i[0] - f) / u) * u + f), Math.round(__((i[1] - f) / u) * u + f)];
      _h(d, i),
      this._stepLvl = l,
      this._interval = u,
      this._niceExtent = d
    },
    parse: function(t) {
      return + Do(t)
    }
  });
  d(["contain", "normalize"],
  function(t) {
    T_.prototype[t] = function(e) {
      return m_[t].call(this, this.parse(e))
    }
  });
  var C_ = [["hh:mm:ss", x_], ["hh:mm:ss", 5 * x_], ["hh:mm:ss", 10 * x_], ["hh:mm:ss", 15 * x_], ["hh:mm:ss", 30 * x_], ["hh:mm\nMM-dd", w_], ["hh:mm\nMM-dd", 5 * w_], ["hh:mm\nMM-dd", 10 * w_], ["hh:mm\nMM-dd", 15 * w_], ["hh:mm\nMM-dd", 30 * w_], ["hh:mm\nMM-dd", b_], ["hh:mm\nMM-dd", 2 * b_], ["hh:mm\nMM-dd", 6 * b_], ["hh:mm\nMM-dd", 12 * b_], ["MM-dd\nyyyy", M_], ["MM-dd\nyyyy", 2 * M_], ["MM-dd\nyyyy", 3 * M_], ["MM-dd\nyyyy", 4 * M_], ["MM-dd\nyyyy", 5 * M_], ["MM-dd\nyyyy", 6 * M_], ["week", 7 * M_], ["MM-dd\nyyyy", 10 * M_], ["week", 14 * M_], ["week", 21 * M_], ["month", 31 * M_], ["week", 42 * M_], ["month", 62 * M_], ["week", 70 * M_], ["quarter", 95 * M_], ["month", 31 * M_ * 4], ["month", 31 * M_ * 5], ["half-year", 380 * M_ / 2], ["month", 31 * M_ * 8], ["month", 31 * M_ * 10], ["year", 380 * M_]];
  T_.create = function(t) {
    return new T_({
      useUTC: t.ecModel.get("useUTC")
    })
  };
  var k_ = fh.prototype,
  I_ = d_.prototype,
  D_ = So,
  A_ = wo,
  L_ = Math.floor,
  P_ = Math.ceil,
  O_ = Math.pow,
  E_ = Math.log,
  B_ = fh.extend({
    type: "log",
    base: 10,
    $constructor: function() {
      fh.apply(this, arguments),
      this._originalScale = new d_
    },
    getTicks: function(t) {
      var e = this._originalScale,
      n = this._extent,
      i = e.getExtent();
      return p(I_.getTicks.call(this, t),
      function(t) {
        var r = wo(O_(this.base, t));
        return r = t === n[0] && e.__fixMin ? Ah(r, i[0]) : r,
        r = t === n[1] && e.__fixMax ? Ah(r, i[1]) : r
      },
      this)
    },
    getMinorTicks: I_.getMinorTicks,
    getLabel: I_.getLabel,
    scale: function(t) {
      return t = k_.scale.call(this, t),
      O_(this.base, t)
    },
    setExtent: function(t, e) {
      var n = this.base;
      t = E_(t) / E_(n),
      e = E_(e) / E_(n),
      I_.setExtent.call(this, t, e)
    },
    getExtent: function() {
      var t = this.base,
      e = k_.getExtent.call(this);
      e[0] = O_(t, e[0]),
      e[1] = O_(t, e[1]);
      var n = this._originalScale,
      i = n.getExtent();
      return n.__fixMin && (e[0] = Ah(e[0], i[0])),
      n.__fixMax && (e[1] = Ah(e[1], i[1])),
      e
    },
    unionExtent: function(t) {
      this._originalScale.unionExtent(t);
      var e = this.base;
      t[0] = E_(t[0]) / E_(e),
      t[1] = E_(t[1]) / E_(e),
      k_.unionExtent.call(this, t)
    },
    unionExtentFromData: function(t, e) {
      this.unionExtent(t.getApproximateExtent(e))
    },
    niceTicks: function(t) {
      t = t || 10;
      var e = this._extent,
      n = e[1] - e[0];
      if (! (1 / 0 === n || 0 >= n)) {
        var i = Ao(n),
        r = t / n * i;
        for (.5 >= r && (i *= 10); ! isNaN(i) && Math.abs(i) < 1 && Math.abs(i) > 0;) i *= 10;
        var a = [wo(P_(e[0] / i) * i), wo(L_(e[1] / i) * i)];
        this._interval = i,
        this._niceExtent = a
      }
    },
    niceExtent: function(t) {
      I_.niceExtent.call(this, t);
      var e = this._originalScale;
      e.__fixMin = t.fixMin,
      e.__fixMax = t.fixMax
    }
  });
  d(["contain", "normalize"],
  function(t) {
    B_.prototype[t] = function(e) {
      return e = E_(e) / E_(this.base),
      k_[t].call(this, e)
    }
  }),
  B_.create = function() {
    return new B_
  };
  var R_ = {
    getMin: function(t) {
      var e = this.option,
      n = t || null == e.rangeStart ? e.min: e.rangeStart;
      return this.axis && null != n && "dataMin" !== n && "function" != typeof n && !k(n) && (n = this.axis.scale.parse(n)),
      n
    },
    getMax: function(t) {
      var e = this.option,
      n = t || null == e.rangeEnd ? e.max: e.rangeEnd;
      return this.axis && null != n && "dataMax" !== n && "function" != typeof n && !k(n) && (n = this.axis.scale.parse(n)),
      n
    },
    getNeedCrossZero: function() {
      var t = this.option;
      return null != t.rangeStart || null != t.rangeEnd ? !1 : !t.scale
    },
    getCoordSysModel: H,
    setRange: function(t, e) {
      this.option.rangeStart = t,
      this.option.rangeEnd = e
    },
    resetRange: function() {
      this.option.rangeStart = this.option.rangeEnd = null
    }
  },
  z_ = da({
    type: "triangle",
    shape: {
      cx: 0,
      cy: 0,
      width: 0,
      height: 0
    },
    buildPath: function(t, e) {
      var n = e.cx,
      i = e.cy,
      r = e.width / 2,
      a = e.height / 2;
      t.moveTo(n, i - a),
      t.lineTo(n + r, i + a),
      t.lineTo(n - r, i + a),
      t.closePath()
    }
  }),
  F_ = da({
    type: "diamond",
    shape: {
      cx: 0,
      cy: 0,
      width: 0,
      height: 0
    },
    buildPath: function(t, e) {
      var n = e.cx,
      i = e.cy,
      r = e.width / 2,
      a = e.height / 2;
      t.moveTo(n, i - a),
      t.lineTo(n + r, i),
      t.lineTo(n, i + a),
      t.lineTo(n - r, i),
      t.closePath()
    }
  }),
  N_ = da({
    type: "pin",
    shape: {
      x: 0,
      y: 0,
      width: 0,
      height: 0
    },
    buildPath: function(t, e) {
      var n = e.x,
      i = e.y,
      r = e.width / 5 * 3,
      a = Math.max(r, e.height),
      o = r / 2,
      s = o * o / (a - o),
      l = i - a + o + s,
      u = Math.asin(s / o),
      h = Math.cos(u) * o,
      c = Math.sin(u),
      f = Math.cos(u),
      d = .6 * o,
      p = .7 * o;
      t.moveTo(n - h, l + s),
      t.arc(n, l, o, Math.PI - u, 2 * Math.PI + u),
      t.bezierCurveTo(n + h - c * d, l + s + f * d, n, i - p, n, i),
      t.bezierCurveTo(n, i - p, n - h + c * d, l + s + f * d, n - h, l + s),
      t.closePath()
    }
  }),
  H_ = da({
    type: "arrow",
    shape: {
      x: 0,
      y: 0,
      width: 0,
      height: 0
    },
    buildPath: function(t, e) {
      var n = e.height,
      i = e.width,
      r = e.x,
      a = e.y,
      o = i / 3 * 2;
      t.moveTo(r, a),
      t.lineTo(r + o, a + n),
      t.lineTo(r, a + n / 4 * 3),
      t.lineTo(r - o, a + n),
      t.lineTo(r, a),
      t.closePath()
    }
  }),
  V_ = {
    line: Gg,
    rect: Vg,
    roundRect: Vg,
    square: Vg,
    circle: Ag,
    diamond: F_,
    pin: N_,
    arrow: H_,
    triangle: z_
  },
  W_ = {
    line: function(t, e, n, i, r) {
      r.x1 = t,
      r.y1 = e + i / 2,
      r.x2 = t + n,
      r.y2 = e + i / 2
    },
    rect: function(t, e, n, i, r) {
      r.x = t,
      r.y = e,
      r.width = n,
      r.height = i
    },
    roundRect: function(t, e, n, i, r) {
      r.x = t,
      r.y = e,
      r.width = n,
      r.height = i,
      r.r = Math.min(n, i) / 4
    },
    square: function(t, e, n, i, r) {
      var a = Math.min(n, i);
      r.x = t,
      r.y = e,
      r.width = a,
      r.height = a
    },
    circle: function(t, e, n, i, r) {
      r.cx = t + n / 2,
      r.cy = e + i / 2,
      r.r = Math.min(n, i) / 2
    },
    diamond: function(t, e, n, i, r) {
      r.cx = t + n / 2,
      r.cy = e + i / 2,
      r.width = n,
      r.height = i
    },
    pin: function(t, e, n, i, r) {
      r.x = t + n / 2,
      r.y = e + i / 2,
      r.width = n,
      r.height = i
    },
    arrow: function(t, e, n, i, r) {
      r.x = t + n / 2,
      r.y = e + i / 2,
      r.width = n,
      r.height = i
    },
    triangle: function(t, e, n, i, r) {
      r.cx = t + n / 2,
      r.cy = e + i / 2,
      r.width = n,
      r.height = i
    }
  },
  G_ = {};
  d(V_,
  function(t, e) {
    G_[e] = new t
  });
  var X_ = da({
    type: "symbol",
    shape: {
      symbolType: "",
      x: 0,
      y: 0,
      width: 0,
      height: 0
    },
    calculateTextPosition: function(t, e, n) {
      var i = Zn(t, e, n),
      r = this.shape;
      return r && "pin" === r.symbolType && "inside" === e.textPosition && (i.y = n.y + .4 * n.height),
      i
    },
    buildPath: function(t, e, n) {
      var i = e.symbolType;
      if ("none" !== i) {
        var r = G_[i];
        r || (i = "rect", r = G_[i]),
        W_[i](e.x, e.y, e.width, e.height, r.shape),
        r.buildPath(t, r.shape, n)
      }
    }
  }),
  q_ = {
    isDimensionStacked: sh,
    enableDataStack: oh,
    getStackedDimension: lh
  },
  U_ = (Object.freeze || Object)({
    createList: Xh,
    getLayoutRect: Zo,
    dataStack: q_,
    createScale: qh,
    mixinAxisModelCommonMethods: Uh,
    completeDimensions: th,
    createDimensions: o_,
    createSymbol: Gh
  }),
  Y_ = 1e-8;
  Zh.prototype = {
    constructor: Zh,
    properties: null,
    getBoundingRect: function() {
      var t = this._rect;
      if (t) return t;
      for (var e = Number.MAX_VALUE,
      n = [e, e], i = [ - e, -e], r = [], a = [], o = this.geometries, s = 0; s < o.length; s++) if ("polygon" === o[s].type) {
        var l = o[s].exterior;
        Er(l, r, a),
        oe(n, n, r),
        se(i, i, a)
      }
      return 0 === s && (n[0] = n[1] = i[0] = i[1] = 0),
      this._rect = new Tn(n[0], n[1], i[0] - n[0], i[1] - n[1])
    },
    contain: function(t) {
      var e = this.getBoundingRect(),
      n = this.geometries;
      if (!e.contain(t[0], t[1])) return ! 1;
      t: for (var i = 0,
      r = n.length; r > i; i++) if ("polygon" === n[i].type) {
        var a = n[i].exterior,
        o = n[i].interiors;
        if (jh(a, t[0], t[1])) {
          for (var s = 0; s < (o ? o.length: 0); s++) if (jh(o[s])) continue t;
          return ! 0
        }
      }
      return ! 1
    },
    transformTo: function(t, e, n, i) {
      var r = this.getBoundingRect(),
      a = r.width / r.height;
      n ? i || (i = n / a) : n = a * i;
      for (var o = new Tn(t, e, n, i), s = r.calculateTransform(o), l = this.geometries, u = 0; u < l.length; u++) if ("polygon" === l[u].type) {
        for (var h = l[u].exterior, c = l[u].interiors, f = 0; f < h.length; f++) ae(h[f], h[f], s);
        for (var d = 0; d < (c ? c.length: 0); d++) for (var f = 0; f < c[d].length; f++) ae(c[d][f], c[d][f], s)
      }
      r = this._rect,
      r.copy(o),
      this.center = [r.x + r.width / 2, r.y + r.height / 2]
    },
    cloneShallow: function(t) {
      null == t && (t = this.name);
      var e = new Zh(t, this.geometries, this.center);
      return e._rect = this._rect,
      e.transformTo = null,
      e
    }
  };
  var j_ = function(t, e) {
    return $h(t),
    p(v(t.features,
    function(t) {
      return t.geometry && t.properties && t.geometry.coordinates.length > 0
    }),
    function(t) {
      var n = t.properties,
      i = t.geometry,
      r = i.coordinates,
      a = [];
      "Polygon" === i.type && a.push({
        type: "polygon",
        exterior: r[0],
        interiors: r.slice(1)
      }),
      "MultiPolygon" === i.type && d(r,
      function(t) {
        t[0] && a.push({
          type: "polygon",
          exterior: t[0],
          interiors: t.slice(1)
        })
      });
      var o = new Zh(n[e || "name"], a, n.cp);
      return o.properties = n,
      o
    })
  },
  Z_ = sr(),
  $_ = [0, 1],
  Q_ = function(t, e, n) {
    this.dim = t,
    this.scale = e,
    this._extent = n || [0, 0],
    this.inverse = !1,
    this.onBand = !1
  };
  Q_.prototype = {
    constructor: Q_,
    contain: function(t) {
      var e = this._extent,
      n = Math.min(e[0], e[1]),
      i = Math.max(e[0], e[1]);
      return t >= n && i >= t
    },
    containData: function(t) {
      return this.scale.contain(t)
    },
    getExtent: function() {
      return this._extent.slice()
    },
    getPixelPrecision: function(t) {
      return To(t || this.scale.getExtent(), this._extent)
    },
    setExtent: function(t, e) {
      var n = this._extent;
      n[0] = t,
      n[1] = e
    },
    dataToCoord: function(t, e) {
      var n = this._extent,
      i = this.scale;
      return t = i.normalize(t),
      this.onBand && "ordinal" === i.type && (n = n.slice(), fc(n, i.count())),
      _o(t, $_, n, e)
    },
    coordToData: function(t, e) {
      var n = this._extent,
      i = this.scale;
      this.onBand && "ordinal" === i.type && (n = n.slice(), fc(n, i.count()));
      var r = _o(t, n, $_, e);
      return this.scale.scale(r)
    },
    pointToData: function() {},
    getTicksCoords: function(t) {
      t = t || {};
      var e = t.tickModel || this.getTickModel(),
      n = Jh(this, e),
      i = n.ticks,
      r = p(i,
      function(t) {
        return {
          coord: this.dataToCoord(t),
          tickValue: t
        }
      },
      this),
      a = e.get("alignWithLabel");
      return dc(this, r, a, t.clamp),
      r
    },
    getMinorTicksCoords: function() {
      if ("ordinal" === this.scale.type) return [];
      var t = this.model.getModel("minorTick"),
      e = t.get("splitNumber");
      e > 0 && 100 > e || (e = 5);
      var n = this.scale.getMinorTicks(e),
      i = p(n,
      function(t) {
        return p(t,
        function(t) {
          return {
            coord: this.dataToCoord(t),
            tickValue: t
          }
        },
        this)
      },
      this);
      return i
    },
    getViewLabels: function() {
      return Kh(this).labels
    },
    getLabelModel: function() {
      return this.model.getModel("axisLabel")
    },
    getTickModel: function() {
      return this.model.getModel("axisTick")
    },
    getBandWidth: function() {
      var t = this._extent,
      e = this.scale.getExtent(),
      n = e[1] - e[0] + (this.onBand ? 1 : 0);
      0 === n && (n = 1);
      var i = Math.abs(t[1] - t[0]);
      return Math.abs(i) / n
    },
    isHorizontal: null,
    getRotate: null,
    calculateCategoryInterval: function() {
      return lc(this)
    }
  };
  var K_ = j_,
  J_ = {};
  d(["map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString", "isObject", "isFunction", "extend", "defaults", "clone", "merge"],
  function(t) {
    J_[t] = gf[t]
  });
  var tx = {};
  d(["extendShape", "extendPath", "makePath", "makeImage", "mergePath", "resizePath", "createIcon", "setHoverStyle", "setLabelStyle", "setTextStyle", "setText", "getFont", "updateProps", "initProps", "getTransform", "clipPointsByRect", "clipRectByRect", "registerShape", "getShapeClass", "Group", "Image", "Text", "Circle", "Sector", "Ring", "Polygon", "Polyline", "Rect", "Line", "BezierCurve", "Arc", "IncrementalDisplayable", "CompoundPath", "LinearGradient", "RadialGradient", "BoundingRect"],
  function(t) {
    tx[t] = fv[t]
  });
  var ex = function(t, e, n) {
    e = x(e) && {
      coordDimensions: e
    } || o({},
    e);
    var i = t.getSource(),
    r = o_(i, e),
    a = new i_(r, t);
    return a.initData(i, n),
    a
  },
  nx = {
    updateSelectedMap: function(t) {
      this._targetList = x(t) ? t.slice() : [],
      this._selectTargetMap = g(t || [],
      function(t, e) {
        return t.set(e.name, e),
        t
      },
      F())
    },
    select: function(t, e) {
      var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t),
      i = this.get("selectedMode");
      "single" === i && this._selectTargetMap.each(function(t) {
        t.selected = !1
      }),
      n && (n.selected = !0)
    },
    unSelect: function(t, e) {
      var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
      n && (n.selected = !1)
    },
    toggleSelected: function(t, e) {
      var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
      return null != n ? (this[n.selected ? "unSelect": "select"](t, e), n.selected) : void 0
    },
    isSelected: function(t, e) {
      var n = null != e ? this._targetList[e] : this._selectTargetMap.get(t);
      return n && n.selected
    }
  },
  ix = Iu({
    type: "series.pie",
    init: function(t) {
      ix.superApply(this, "init", arguments),
      this.legendVisualProvider = new pc(y(this.getData, this), y(this.getRawData, this)),
      this.updateSelectedMap(this._createSelectableList()),
      this._defaultLabelLine(t)
    },
    mergeOption: function(t) {
      ix.superCall(this, "mergeOption", t),
      this.updateSelectedMap(this._createSelectableList())
    },
    getInitialData: function() {
      return ex(this, {
        coordDimensions: ["value"],
        encodeDefaulter: _(cs, this)
      })
    },
    _createSelectableList: function() {
      for (var t = this.getRawData(), e = t.mapDimension("value"), n = [], i = 0, r = t.count(); r > i; i++) n.push({
        name: t.getName(i),
        value: t.get(e, i),
        selected: $s(t, i, "selected")
      });
      return n
    },
    getDataParams: function(t) {
      var e = this.getData(),
      n = ix.superCall(this, "getDataParams", t),
      i = [];
      return e.each(e.mapDimension("value"),
      function(t) {
        i.push(t)
      }),
      n.percent = Co(i, t, e.hostModel.get("percentPrecision")),
      n.$vars.push("percent"),
      n
    },
    _defaultLabelLine: function(t) {
      Ji(t, "labelLine", ["show"]);
      var e = t.labelLine,
      n = t.emphasis.labelLine;
      e.show = e.show && t.label.show,
      n.show = n.show && t.emphasis.label.show
    },
    defaultOption: {
      zlevel: 0,
      z: 2,
      legendHoverLink: !0,
      hoverAnimation: !0,
      center: ["50%", "50%"],
      radius: [0, "75%"],
      clockwise: !0,
      startAngle: 90,
      minAngle: 0,
      minShowLabelAngle: 0,
      selectedOffset: 10,
      hoverOffset: 10,
      avoidLabelOverlap: !0,
      percentPrecision: 2,
      stillShowZeroSum: !0,
      left: 0,
      top: 0,
      right: 0,
      bottom: 0,
      width: null,
      height: null,
      label: {
        rotate: !1,
        show: !0,
        position: "outer",
        alignTo: "none",
        margin: "25%",
        bleedMargin: 10,
        distanceToLabelLine: 5
      },
      labelLine: {
        show: !0,
        length: 15,
        length2: 15,
        smooth: !1,
        lineStyle: {
          width: 1,
          type: "solid"
        }
      },
      itemStyle: {
        borderWidth: 1
      },
      animationType: "expansion",
      animationTypeUpdate: "transition",
      animationEasing: "cubicOut"
    }
  });
  c(ix, nx);
  var rx = mc.prototype;
  rx.updateData = function(t, e, n) {
    var i = this.childAt(0),
    r = this.childAt(1),
    a = this.childAt(2),
    l = t.hostModel,
    u = t.getItemModel(e),
    h = t.getItemLayout(e),
    c = o({},
    h);
    c.label = null;
    var f = l.getShallow("animationTypeUpdate");
    if (n) {
      i.setShape(c);
      var d = l.getShallow("animationType");
      "scale" === d ? (i.shape.r = h.r0, Ja(i, {
        shape: {
          r: h.r
        }
      },
      l, e)) : (i.shape.endAngle = h.startAngle, Ka(i, {
        shape: {
          endAngle: h.endAngle
        }
      },
      l, e))
    } else "expansion" === f ? i.setShape(c) : Ka(i, {
      shape: c
    },
    l, e);
    var p = t.getItemVisual(e, "color");
    i.useStyle(s({
      lineJoin: "bevel",
      fill: p
    },
    u.getModel("itemStyle").getItemStyle())),
    i.hoverStyle = u.getModel("emphasis.itemStyle").getItemStyle();
    var g = u.getShallow("cursor");
    g && i.attr("cursor", g),
    vc(this, t.getItemLayout(e), l.isSelected(t.getName(e)), l.get("selectedOffset"), l.get("animation"));
    var v = !n && "transition" === f;
    this._updateLabel(t, e, v),
    this.highDownOnUpdate = l.get("silent") ? null: function(t, e) {
      var n = l.isAnimationEnabled() && u.get("hoverAnimation");
      "emphasis" === e ? (r.ignore = r.hoverIgnore, a.ignore = a.hoverIgnore, n && (i.stopAnimation(!0), i.animateTo({
        shape: {
          r: h.r + l.get("hoverOffset")
        }
      },
      300, "elasticOut"))) : (r.ignore = r.normalIgnore, a.ignore = a.normalIgnore, n && (i.stopAnimation(!0), i.animateTo({
        shape: {
          r: h.r
        }
      },
      300, "elasticOut")))
    },
    Ra(this)
  },
  rx._updateLabel = function(t, e, n) {
    var i = this.childAt(1),
    r = this.childAt(2),
    a = t.hostModel,
    o = t.getItemModel(e),
    s = t.getItemLayout(e),
    l = s.label,
    u = t.getItemVisual(e, "color");
    if (!l || isNaN(l.x) || isNaN(l.y)) return void(r.ignore = r.normalIgnore = r.hoverIgnore = i.ignore = i.normalIgnore = i.hoverIgnore = !0);
    var h = {
      points: l.linePoints || [[l.x, l.y], [l.x, l.y], [l.x, l.y]]
    },
    c = {
      x: l.x,
      y: l.y
    };
    n ? (Ka(i, {
      shape: h
    },
    a, e), Ka(r, {
      style: c
    },
    a, e)) : (i.attr({
      shape: h
    }), r.attr({
      style: c
    })),
    r.attr({
      rotation: l.rotation,
      origin: [l.x, l.y],
      z2: 10
    });
    var f = o.getModel("label"),
    d = o.getModel("emphasis.label"),
    p = o.getModel("labelLine"),
    g = o.getModel("emphasis.labelLine"),
    u = t.getItemVisual(e, "color");
    Ha(r.style, r.hoverStyle = {},
    f, d, {
      labelFetcher: t.hostModel,
      labelDataIndex: e,
      defaultText: l.text,
      autoColor: u,
      useInsideStyle: !!l.inside
    },
    {
      textAlign: l.textAlign,
      textVerticalAlign: l.verticalAlign,
      opacity: t.getItemVisual(e, "opacity")
    }),
    r.ignore = r.normalIgnore = !f.get("show"),
    r.hoverIgnore = !d.get("show"),
    i.ignore = i.normalIgnore = !p.get("show"),
    i.hoverIgnore = !g.get("show"),
    i.setStyle({
      stroke: u,
      opacity: t.getItemVisual(e, "opacity")
    }),
    i.setStyle(p.getModel("lineStyle").getLineStyle()),
    i.hoverStyle = g.getModel("lineStyle").getLineStyle();
    var v = p.get("smooth");
    v && v === !0 && (v = .4),
    i.setShape({
      smooth: v
    })
  },
  h(mc, pd);
  var ax = (ul.extend({
    type: "pie",
    init: function() {
      var t = new pd;
      this._sectorGroup = t
    },
    render: function(t, e, n, i) {
      if (!i || i.from !== this.uid) {
        var r = t.getData(),
        a = this._data,
        o = this.group,
        s = e.get("animation"),
        l = !a,
        u = t.get("animationType"),
        h = t.get("animationTypeUpdate"),
        c = _(gc, this.uid, t, s, n),
        f = t.get("selectedMode");
        if (r.diff(a).add(function(t) {
          var e = new mc(r, t);
          l && "scale" !== u && e.eachChild(function(t) {
            t.stopAnimation(!0)
          }),
          f && e.on("click", c),
          r.setItemGraphicEl(t, e),
          o.add(e)
        }).update(function(t, e) {
          var n = a.getItemGraphicEl(e);
          l || "transition" === h || n.eachChild(function(t) {
            t.stopAnimation(!0)
          }),
          n.updateData(r, t),
          n.off("click"),
          f && n.on("click", c),
          o.add(n),
          r.setItemGraphicEl(t, n)
        }).remove(function(t) {
          var e = a.getItemGraphicEl(t);
          o.remove(e)
        }).execute(), s && r.count() > 0 && (l ? "scale" !== u: "transition" !== h)) {
          for (var d = r.getItemLayout(0), p = 1; isNaN(d.startAngle) && p < r.count(); ++p) d = r.getItemLayout(p);
          var g = Math.max(n.getWidth(), n.getHeight()) / 2,
          v = y(o.removeClipPath, o);
          o.setClipPath(this._createClipPath(d.cx, d.cy, g, d.startAngle, d.clockwise, v, t, l))
        } else o.removeClipPath();
        this._data = r
      }
    },
    dispose: function() {},
    _createClipPath: function(t, e, n, i, r, a, o, s) {
      var l = new Og({
        shape: {
          cx: t,
          cy: e,
          r0: 0,
          r: n,
          startAngle: i,
          endAngle: i,
          clockwise: r
        }
      }),
      u = s ? Ja: Ka;
      return u(l, {
        shape: {
          endAngle: i + (r ? 1 : -1) * Math.PI * 2
        }
      },
      o, a),
      l
    },
    containPoint: function(t, e) {
      var n = e.getData(),
      i = n.getItemLayout(0);
      if (i) {
        var r = t[0] - i.cx,
        a = t[1] - i.cy,
        o = Math.sqrt(r * r + a * a);
        return o <= i.r && o >= i.r0
      }
    }
  }),
  function(t, e) {
    d(e,
    function(e) {
      e.update = "updateView",
      _u(e,
      function(n, i) {
        var r = {};
        return i.eachComponent({
          mainType: "series",
          subType: t,
          query: n
        },
        function(t) {
          t[e.method] && t[e.method](n.name, n.dataIndex);
          var i = t.getData();
          i.each(function(e) {
            var n = i.getName(e);
            r[n] = t.isSelected(n) || !1
          })
        }),
        {
          name: n.name,
          selected: r,
          seriesId: n.seriesId
        }
      })
    })
  }),
  ox = function(t) {
    return {
      getTargetSeries: function(e) {
        var n = {},
        i = F();
        return e.eachSeriesByType(t,
        function(t) {
          t.__paletteScope = n,
          i.set(t.uid, t)
        }),
        i
      },
      reset: function(t) {
        var e = t.getRawData(),
        n = {},
        i = t.getData();
        i.each(function(t) {
          var e = i.getRawIndex(t);
          n[e] = t
        }),
        e.each(function(r) {
          var a, o = n[r],
          s = null != o && i.getItemVisual(o, "color", !0),
          l = null != o && i.getItemVisual(o, "borderColor", !0);
          if (s && l || (a = e.getItemModel(r)), !s) {
            var u = a.get("itemStyle.color") || t.getColorFromPalette(e.getName(r) || r + "", t.__paletteScope, e.count());
            null != o && i.setItemVisual(o, "color", u)
          }
          if (!l) {
            var h = a.get("itemStyle.borderColor");
            null != o && i.setItemVisual(o, "borderColor", h)
          }
        })
      }
    }
  },
  sx = Math.PI / 180,
  lx = function(t, e, n, i, r, a) {
    var o, s, l = t.getData(),
    u = [],
    h = !1,
    c = (t.get("minShowLabelAngle") || 0) * sx;
    l.each(function(i) {
      var a = l.getItemLayout(i),
      f = l.getItemModel(i),
      d = f.getModel("label"),
      p = d.get("position") || f.get("emphasis.label.position"),
      g = d.get("distanceToLabelLine"),
      v = d.get("alignTo"),
      m = xo(d.get("margin"), n),
      y = d.get("bleedMargin"),
      _ = d.getFont(),
      x = f.getModel("labelLine"),
      w = x.get("length");
      w = xo(w, n);
      var b = x.get("length2");
      if (b = xo(b, n), !(a.angle < c)) {
        var M, S, T, C, k = (a.startAngle + a.endAngle) / 2,
        I = Math.cos(k),
        D = Math.sin(k);
        o = a.cx,
        s = a.cy;
        var A = t.getFormattedLabel(i, "normal") || l.getName(i),
        L = Xn(A, _, C, "top"),
        P = "inside" === p || "inner" === p;
        if ("center" === p) M = a.cx,
        S = a.cy,
        C = "center";
        else {
          var O = (P ? (a.r + a.r0) / 2 * I: a.r * I) + o,
          E = (P ? (a.r + a.r0) / 2 * D: a.r * D) + s;
          if (M = O + 3 * I, S = E + 3 * D, !P) {
            var B = O + I * (w + e - a.r),
            R = E + D * (w + e - a.r),
            z = B + (0 > I ? -1 : 1) * b,
            F = R;
            M = "edge" === v ? 0 > I ? r + m: r + n - m: z + (0 > I ? -g: g),
            S = F,
            T = [[O, E], [B, R], [z, F]]
          }
          C = P ? "center": "edge" === v ? I > 0 ? "right": "left": I > 0 ? "left": "right"
        }
        var N, H = d.get("rotate");
        N = "number" == typeof H ? H * (Math.PI / 180) : H ? 0 > I ? -k + Math.PI: -k: 0,
        h = !!N,
        a.label = {
          x: M,
          y: S,
          position: p,
          height: L.height,
          len: w,
          len2: b,
          linePoints: T,
          textAlign: C,
          verticalAlign: "middle",
          rotation: N,
          inside: P,
          labelDistance: g,
          labelAlignTo: v,
          labelMargin: m,
          bleedMargin: y,
          textRect: L,
          text: A,
          font: _
        },
        P || u.push(a.label)
      }
    }),
    !h && t.get("avoidLabelOverlap") && _c(u, o, s, e, n, i, r, a)
  },
  ux = 2 * Math.PI,
  hx = Math.PI / 180,
  cx = function(t, e, n) {
    e.eachSeriesByType(t,
    function(t) {
      var e = t.getData(),
      i = e.mapDimension("value"),
      r = wc(t, n),
      a = t.get("center"),
      o = t.get("radius");
      x(o) || (o = [0, o]),
      x(a) || (a = [a, a]);
      var s = xo(r.width, n.getWidth()),
      l = xo(r.height, n.getHeight()),
      u = Math.min(s, l),
      h = xo(a[0], s) + r.x,
      c = xo(a[1], l) + r.y,
      f = xo(o[0], u / 2),
      d = xo(o[1], u / 2),
      p = -t.get("startAngle") * hx,
      g = t.get("minAngle") * hx,
      v = 0;
      e.each(i,
      function(t) { ! isNaN(t) && v++
      });
      var m = e.getSum(i),
      y = Math.PI / (m || v) * 2,
      _ = t.get("clockwise"),
      w = t.get("roseType"),
      b = t.get("stillShowZeroSum"),
      M = e.getDataExtent(i);
      M[0] = 0;
      var S = ux,
      T = 0,
      C = p,
      k = _ ? 1 : -1;
      if (e.each(i,
      function(t, n) {
        var i;
        if (isNaN(t)) return void e.setItemLayout(n, {
          angle: 0 / 0,
          startAngle: 0 / 0,
          endAngle: 0 / 0,
          clockwise: _,
          cx: h,
          cy: c,
          r0: f,
          r: w ? 0 / 0 : d,
          viewRect: r
        });
        i = "area" !== w ? 0 === m && b ? y: t * y: ux / v,
        g > i ? (i = g, S -= g) : T += t;
        var a = C + k * i;
        e.setItemLayout(n, {
          angle: i,
          startAngle: C,
          endAngle: a,
          clockwise: _,
          cx: h,
          cy: c,
          r0: f,
          r: w ? _o(t, M, [f, d]) : d,
          viewRect: r
        }),
        C = a
      }), ux > S && v) if (.001 >= S) {
        var I = ux / v;
        e.each(i,
        function(t, n) {
          if (!isNaN(t)) {
            var i = e.getItemLayout(n);
            i.angle = I,
            i.startAngle = p + k * n * I,
            i.endAngle = p + k * (n + 1) * I
          }
        })
      } else y = S / T,
      C = p,
      e.each(i,
      function(t, n) {
        if (!isNaN(t)) {
          var i = e.getItemLayout(n),
          r = i.angle === g ? g: t * y;
          i.startAngle = C,
          i.endAngle = C + k * r,
          C += k * r
        }
      });
      lx(t, d, r.width, r.height, r.x, r.y)
    })
  },
  fx = function(t) {
    return {
      seriesType: t,
      reset: function(t, e) {
        var n = e.findComponents({
          mainType: "legend"
        });
        if (n && n.length) {
          var i = t.getData();
          i.filterSelf(function(t) {
            for (var e = i.getName(t), r = 0; r < n.length; r++) if (!n[r].isSelected(e)) return ! 1;
            return ! 0
          })
        }
      }
    }
  };
  ax("pie", [{
    type: "pieToggleSelect",
    event: "pieselectchanged",
    method: "toggleSelected"
  },
  {
    type: "pieSelect",
    event: "pieselected",
    method: "select"
  },
  {
    type: "pieUnSelect",
    event: "pieunselected",
    method: "unSelect"
  }]),
  Mu(ox("pie")),
  bu(_(cx, "pie")),
  mu(fx("pie"));
  var dx = function(t) {
    this._axes = {},
    this._dimList = [],
    this.name = t || ""
  };
  dx.prototype = {
    constructor: dx,
    type: "cartesian",
    getAxis: function(t) {
      return this._axes[t]
    },
    getAxes: function() {
      return p(this._dimList, bc, this)
    },
    getAxesByScale: function(t) {
      return t = t.toLowerCase(),
      v(this.getAxes(),
      function(e) {
        return e.scale.type === t
      })
    },
    addAxis: function(t) {
      var e = t.dim;
      this._axes[e] = t,
      this._dimList.push(e)
    },
    dataToCoord: function(t) {
      return this._dataCoordConvert(t, "dataToCoord")
    },
    coordToData: function(t) {
      return this._dataCoordConvert(t, "coordToData")
    },
    _dataCoordConvert: function(t, e) {
      for (var n = this._dimList,
      i = t instanceof Array ? [] : {},
      r = 0; r < n.length; r++) {
        var a = n[r],
        o = this._axes[a];
        i[a] = o[e](t[a])
      }
      return i
    }
  },
  Mc.prototype = {
    constructor: Mc,
    type: "cartesian2d",
    dimensions: ["x", "y"],
    getBaseAxis: function() {
      return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x")
    },
    containPoint: function(t) {
      var e = this.getAxis("x"),
      n = this.getAxis("y");
      return e.contain(e.toLocalCoord(t[0])) && n.contain(n.toLocalCoord(t[1]))
    },
    containData: function(t) {
      return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1])
    },
    dataToPoint: function(t, e, n) {
      var i = this.getAxis("x"),
      r = this.getAxis("y");
      return n = n || [],
      n[0] = i.toGlobalCoord(i.dataToCoord(t[0])),
      n[1] = r.toGlobalCoord(r.dataToCoord(t[1])),
      n
    },
    clampData: function(t, e) {
      var n = this.getAxis("x").scale,
      i = this.getAxis("y").scale,
      r = n.getExtent(),
      a = i.getExtent(),
      o = n.parse(t[0]),
      s = i.parse(t[1]);
      return e = e || [],
      e[0] = Math.min(Math.max(Math.min(r[0], r[1]), o), Math.max(r[0], r[1])),
      e[1] = Math.min(Math.max(Math.min(a[0], a[1]), s), Math.max(a[0], a[1])),
      e
    },
    pointToData: function(t, e) {
      var n = this.getAxis("x"),
      i = this.getAxis("y");
      return e = e || [],
      e[0] = n.coordToData(n.toLocalCoord(t[0])),
      e[1] = i.coordToData(i.toLocalCoord(t[1])),
      e
    },
    getOtherAxis: function(t) {
      return this.getAxis("x" === t.dim ? "y": "x")
    },
    getArea: function() {
      var t = this.getAxis("x").getGlobalExtent(),
      e = this.getAxis("y").getGlobalExtent(),
      n = Math.min(t[0], t[1]),
      i = Math.min(e[0], e[1]),
      r = Math.max(t[0], t[1]) - n,
      a = Math.max(e[0], e[1]) - i,
      o = new Tn(n, i, r, a);
      return o
    }
  },
  h(Mc, dx);
  var px = function(t, e, n, i, r) {
    Q_.call(this, t, e, n),
    this.type = i || "value",
    this.position = r || "bottom"
  };
  px.prototype = {
    constructor: px,
    index: 0,
    getAxesOnZeroOf: null,
    model: null,
    isHorizontal: function() {
      var t = this.position;
      return "top" === t || "bottom" === t
    },
    getGlobalExtent: function(t) {
      var e = this.getExtent();
      return e[0] = this.toGlobalCoord(e[0]),
      e[1] = this.toGlobalCoord(e[1]),
      t && e[0] > e[1] && e.reverse(),
      e
    },
    getOtherAxis: function() {
      this.grid.getOtherAxis()
    },
    pointToData: function(t, e) {
      return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e)
    },
    toLocalCoord: null,
    toGlobalCoord: null
  },
  h(px, Q_);
  var gx = {
    show: !0,
    zlevel: 0,
    z: 0,
    inverse: !1,
    name: "",
    nameLocation: "end",
    nameRotate: null,
    nameTruncate: {
      maxWidth: null,
      ellipsis: "...",
      placeholder: "."
    },
    nameTextStyle: {},
    nameGap: 15,
    silent: !1,
    triggerEvent: !1,
    tooltip: {
      show: !1
    },
    axisPointer: {},
    axisLine: {
      show: !0,
      onZero: !0,
      onZeroAxisIndex: null,
      lineStyle: {
        color: "#333",
        width: 1,
        type: "solid"
      },
      symbol: ["none", "none"],
      symbolSize: [10, 15]
    },
    axisTick: {
      show: !0,
      inside: !1,
      length: 5,
      lineStyle: {
        width: 1
      }
    },
    axisLabel: {
      show: !0,
      inside: !1,
      rotate: 0,
      showMinLabel: null,
      showMaxLabel: null,
      margin: 8,
      fontSize: 12
    },
    splitLine: {
      show: !0,
      lineStyle: {
        color: ["#ccc"],
        width: 1,
        type: "solid"
      }
    },
    splitArea: {
      show: !1,
      areaStyle: {
        color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]
      }
    }
  },
  vx = {};
  vx.categoryAxis = r({
    boundaryGap: !0,
    deduplication: null,
    splitLine: {
      show: !1
    },
    axisTick: {
      alignWithLabel: !1,
      interval: "auto"
    },
    axisLabel: {
      interval: "auto"
    }
  },
  gx),
  vx.valueAxis = r({
    boundaryGap: [0, 0],
    splitNumber: 5,
    minorTick: {
      show: !1,
      splitNumber: 5,
      length: 3,
      lineStyle: {}
    },
    minorSplitLine: {
      show: !1,
      lineStyle: {
        color: "#eee",
        width: 1
      }
    }
  },
  gx),
  vx.timeAxis = s({
    scale: !0,
    min: "dataMin",
    max: "dataMax"
  },
  vx.valueAxis),
  vx.logAxis = s({
    scale: !0,
    logBase: 10
  },
  vx.valueAxis);
  var mx = ["value", "category", "time", "log"],
  yx = function(t, e, n, i) {
    d(mx,
    function(o) {
      e.extend({
        type: t + "Axis." + o,
        mergeDefaultAndTheme: function(e, i) {
          var a = this.layoutMode,
          s = a ? Qo(e) : {},
          l = i.getTheme();
          r(e, l.get(o + "Axis")),
          r(e, this.getDefaultOption()),
          e.type = n(t, e),
          a && $o(e, s, a)
        },
        optionUpdated: function() {
          var t = this.option;
          "category" === t.type && (this.__ordinalMeta = dh.createByAxisModel(this))
        },
        getCategories: function(t) {
          var e = this.option;
          return "category" === e.type ? t ? e.data: this.__ordinalMeta.categories: void 0
        },
        getOrdinalMeta: function() {
          return this.__ordinalMeta
        },
        defaultOption: a([{},
        vx[o + "Axis"], i], !0)
      })
    }),
    Rv.registerSubTypeDefaulter(t + "Axis", _(n, t))
  },
  _x = Rv.extend({
    type: "cartesian2dAxis",
    axis: null,
    init: function() {
      _x.superApply(this, "init", arguments),
      this.resetRange()
    },
    mergeOption: function() {
      _x.superApply(this, "mergeOption", arguments),
      this.resetRange()
    },
    restoreData: function() {
      _x.superApply(this, "restoreData", arguments),
      this.resetRange()
    },
    getCoordSysModel: function() {
      return this.ecModel.queryComponents({
        mainType: "grid",
        index: this.option.gridIndex,
        id: this.option.gridId
      })[0]
    }
  });
  r(_x.prototype, R_);
  var xx = {
    offset: 0
  };
  yx("x", _x, Sc, xx),
  yx("y", _x, Sc, xx),
  Rv.extend({
    type: "grid",
    dependencies: ["xAxis", "yAxis"],
    layoutMode: "box",
    coordinateSystem: null,
    defaultOption: {
      show: !1,
      zlevel: 0,
      z: 0,
      left: "10%",
      top: 60,
      right: "10%",
      bottom: 60,
      containLabel: !1,
      backgroundColor: "rgba(0,0,0,0)",
      borderWidth: 1,
      borderColor: "#ccc"
    }
  });
  var bx = Cc.prototype;
  bx.type = "grid",
  bx.axisPointerEnabled = !0,
  bx.getRect = function() {
    return this._rect
  },
  bx.update = function(t, e) {
    var n = this._axesMap;
    this._updateScale(t, this.model),
    d(n.x,
    function(t) {
      Oh(t.scale, t.model)
    }),
    d(n.y,
    function(t) {
      Oh(t.scale, t.model)
    });
    var i = {};
    d(n.x,
    function(t) {
      kc(n, "y", t, i)
    }),
    d(n.y,
    function(t) {
      kc(n, "x", t, i)
    }),
    this.resize(this.model, e)
  },
  bx.resize = function(t, e, n) {
    function i() {
      d(a,
      function(t) {
        var e = t.isHorizontal(),
        n = e ? [0, r.width] : [0, r.height],
        i = t.inverse ? 1 : 0;
        t.setExtent(n[i], n[1 - i]),
        Dc(t, e ? r.x: r.y)
      })
    }
    var r = Zo(t.getBoxLayoutParams(), {
      width: e.getWidth(),
      height: e.getHeight()
    });
    this._rect = r;
    var a = this._axesList;
    i(),
    !n && t.get("containLabel") && (d(a,
    function(t) {
      if (!t.model.get("axisLabel.inside")) {
        var e = Fh(t);
        if (e) {
          var n = t.isHorizontal() ? "height": "width",
          i = t.model.get("axisLabel.margin");
          r[n] -= e[n] + i,
          "top" === t.position ? r.y += e.height + i: "left" === t.position && (r.x += e.width + i)
        }
      }
    }), i())
  },
  bx.getAxis = function(t, e) {
    var n = this._axesMap[t];
    if (null != n) {
      if (null == e) for (var i in n) if (n.hasOwnProperty(i)) return n[i];
      return n[e]
    }
  },
  bx.getAxes = function() {
    return this._axesList.slice()
  },
  bx.getCartesian = function(t, e) {
    if (null != t && null != e) {
      var n = "x" + t + "y" + e;
      return this._coordsMap[n]
    }
    M(t) && (e = t.yAxisIndex, t = t.xAxisIndex);
    for (var i = 0,
    r = this._coordsList; i < r.length; i++) if (r[i].getAxis("x").index === t || r[i].getAxis("y").index === e) return r[i]
  },
  bx.getCartesians = function() {
    return this._coordsList.slice()
  },
  bx.convertToPixel = function(t, e, n) {
    var i = this._findConvertTarget(t, e);
    return i.cartesian ? i.cartesian.dataToPoint(n) : i.axis ? i.axis.toGlobalCoord(i.axis.dataToCoord(n)) : null
  },
  bx.convertFromPixel = function(t, e, n) {
    var i = this._findConvertTarget(t, e);
    return i.cartesian ? i.cartesian.pointToData(n) : i.axis ? i.axis.coordToData(i.axis.toLocalCoord(n)) : null
  },
  bx._findConvertTarget = function(t, e) {
    var n, i, r = e.seriesModel,
    a = e.xAxisModel || r && r.getReferringComponents("xAxis")[0],
    o = e.yAxisModel || r && r.getReferringComponents("yAxis")[0],
    s = e.gridModel,
    l = this._coordsList;
    if (r) n = r.coordinateSystem,
    u(l, n) < 0 && (n = null);
    else if (a && o) n = this.getCartesian(a.componentIndex, o.componentIndex);
    else if (a) i = this.getAxis("x", a.componentIndex);
    else if (o) i = this.getAxis("y", o.componentIndex);
    else if (s) {
      var h = s.coordinateSystem;
      h === this && (n = this._coordsList[0])
    }
    return {
      cartesian: n,
      axis: i
    }
  },
  bx.containPoint = function(t) {
    var e = this._coordsList[0];
    return e ? e.containPoint(t) : void 0
  },
  bx._initCartesian = function(t, e) {
    function n(n) {
      return function(o, s) {
        if (Tc(o, t, e)) {
          var l = o.get("position");
          "x" === n ? "top" !== l && "bottom" !== l && (l = i.bottom ? "top": "bottom") : "left" !== l && "right" !== l && (l = i.left ? "right": "left"),
          i[l] = !0;
          var u = new px(n, Eh(o), [0, 0], o.get("type"), l),
          h = "category" === u.type;
          u.onBand = h && o.get("boundaryGap"),
          u.inverse = o.get("inverse"),
          o.axis = u,
          u.model = o,
          u.grid = this,
          u.index = s,
          this._axesList.push(u),
          r[n][s] = u,
          a[n]++
        }
      }
    }
    var i = {
      left: !1,
      right: !1,
      top: !1,
      bottom: !1
    },
    r = {
      x: {},
      y: {}
    },
    a = {
      x: 0,
      y: 0
    };
    return e.eachComponent("xAxis", n("x"), this),
    e.eachComponent("yAxis", n("y"), this),
    a.x && a.y ? (this._axesMap = r, void d(r.x,
    function(e, n) {
      d(r.y,
      function(i, r) {
        var a = "x" + n + "y" + r,
        o = new Mc(a);
        o.grid = this,
        o.model = t,
        this._coordsMap[a] = o,
        this._coordsList.push(o),
        o.addAxis(e),
        o.addAxis(i)
      },
      this)
    },
    this)) : (this._axesMap = {},
    void(this._axesList = []))
  },
  bx._updateScale = function(t, e) {
    function n(t, e) {
      d(t.mapDimension(e.dim, !0),
      function(n) {
        e.scale.unionExtentFromData(t, lh(t, n))
      })
    }
    d(this._axesList,
    function(t) {
      t.scale.setExtent(1 / 0, -1 / 0)
    }),
    t.eachSeries(function(i) {
      if (Lc(i)) {
        var r = Ac(i, t),
        a = r[0],
        o = r[1];
        if (!Tc(a, e, t) || !Tc(o, e, t)) return;
        var s = this.getCartesian(a.componentIndex, o.componentIndex),
        l = i.getData(),
        u = s.getAxis("x"),
        h = s.getAxis("y");
        "list" === l.type && (n(l, u, i), n(l, h, i))
      }
    },
    this)
  },
  bx.getTooltipAxes = function(t) {
    var e = [],
    n = [];
    return d(this.getCartesians(),
    function(i) {
      var r = null != t && "auto" !== t ? i.getAxis(t) : i.getBaseAxis(),
      a = i.getOtherAxis(r);
      u(e, r) < 0 && e.push(r),
      u(n, a) < 0 && n.push(a)
    }),
    {
      baseAxes: e,
      otherAxes: n
    }
  };
  var Mx = ["xAxis", "yAxis"];
  Cc.create = function(t, e) {
    var n = [];
    return t.eachComponent("grid",
    function(i, r) {
      var a = new Cc(i, t, e);
      a.name = "grid_" + r,
      a.resize(i, e, !0),
      i.coordinateSystem = a,
      n.push(a)
    }),
    t.eachSeries(function(e) {
      if (Lc(e)) {
        var n = Ac(e, t),
        i = n[0],
        r = n[1],
        a = i.getCoordSysModel(),
        o = a.coordinateSystem;
        e.coordinateSystem = o.getCartesian(i.componentIndex, r.componentIndex)
      }
    }),
    n
  },
  Cc.dimensions = Cc.prototype.dimensions = Mc.prototype.dimensions,
  Ms.register("cartesian2d", Cc);
  var Sx = Math.PI,
  Tx = function(t, e) {
    this.opt = e,
    this.axisModel = t,
    s(e, {
      labelOffset: 0,
      nameDirection: 1,
      tickDirection: 1,
      labelDirection: 1,
      silent: !0
    }),
    this.group = new pd;
    var n = new pd({
      position: e.position.slice(),
      rotation: e.rotation
    });
    n.updateTransform(),
    this._transform = n.transform,
    this._dumbGroup = n
  };
  Tx.prototype = {
    constructor: Tx,
    hasBuilder: function(t) {
      return !! Cx[t]
    },
    add: function(t) {
      Cx[t].call(this)
    },
    getGroup: function() {
      return this.group
    }
  };
  var Cx = {
    axisLine: function() {
      var t = this.opt,
      e = this.axisModel;
      if (e.get("axisLine.show")) {
        var n = this.axisModel.axis.getExtent(),
        i = this._transform,
        r = [n[0], 0],
        a = [n[1], 0];
        i && (ae(r, r, i), ae(a, a, i));
        var s = o({
          lineCap: "round"
        },
        e.getModel("axisLine.lineStyle").getLineStyle());
        this.group.add(new Gg({
          anid: "line",
          subPixelOptimize: !0,
          shape: {
            x1: r[0],
            y1: r[1],
            x2: a[0],
            y2: a[1]
          },
          style: s,
          strokeContainThreshold: t.strokeContainThreshold || 5,
          silent: !0,
          z2: 1
        }));
        var l = e.get("axisLine.symbol"),
        u = e.get("axisLine.symbolSize"),
        h = e.get("axisLine.symbolOffset") || 0;
        if ("number" == typeof h && (h = [h, h]), null != l) {
          "string" == typeof l && (l = [l, l]),
          ("string" == typeof u || "number" == typeof u) && (u = [u, u]);
          var c = u[0],
          f = u[1];
          d([{
            rotate: t.rotation + Math.PI / 2,
            offset: h[0],
            r: 0
          },
          {
            rotate: t.rotation - Math.PI / 2,
            offset: h[1],
            r: Math.sqrt((r[0] - a[0]) * (r[0] - a[0]) + (r[1] - a[1]) * (r[1] - a[1]))
          }],
          function(e, n) {
            if ("none" !== l[n] && null != l[n]) {
              var i = Gh(l[n], -c / 2, -f / 2, c, f, s.stroke, !0),
              a = e.r + e.offset,
              o = [r[0] + a * Math.cos(t.rotation), r[1] - a * Math.sin(t.rotation)];
              i.attr({
                rotation: e.rotate,
                position: o,
                silent: !0,
                z2: 11
              }),
              this.group.add(i)
            }
          },
          this)
        }
      }
    },
    axisTickLabel: function() {
      var t = this.axisModel,
      e = this.opt,
      n = Fc(this, t, e),
      i = Hc(this, t, e);
      Oc(t, i, n),
      Nc(this, t, e)
    },
    axisName: function() {
      var t = this.opt,
      e = this.axisModel,
      n = I(t.axisName, e.get("name"));
      if (n) {
        var i, r = e.get("nameLocation"),
        a = t.nameDirection,
        s = e.getModel("nameTextStyle"),
        l = e.get("nameGap") || 0,
        u = this.axisModel.axis.getExtent(),
        h = u[0] > u[1] ? -1 : 1,
        c = ["start" === r ? u[0] - h * l: "end" === r ? u[1] + h * l: (u[0] + u[1]) / 2, Rc(r) ? t.labelOffset + a * l: 0],
        f = e.get("nameRotate");
        null != f && (f = f * Sx / 180);
        var d;
        Rc(r) ? i = Ix(t.rotation, null != f ? f: t.rotation, a) : (i = Pc(t, r, f || 0, u), d = t.axisNameAvailableWidth, null != d && (d = Math.abs(d / Math.sin(i.rotation)), !isFinite(d) && (d = null)));
        var p = s.getFont(),
        g = e.get("nameTruncate", !0) || {},
        v = g.ellipsis,
        m = I(t.nameTruncateMaxWidth, g.maxWidth, d),
        y = null != v && null != m ? Dv(n, m, p, v, {
          minChar: 2,
          placeholder: g.placeholder
        }) : n,
        _ = e.get("tooltip", !0),
        x = e.mainType,
        w = {
          componentType: x,
          name: n,
          $vars: ["name"]
        };
        w[x + "Index"] = e.componentIndex;
        var b = new Dg({
          anid: "name",
          __fullText: n,
          __truncatedText: y,
          position: c,
          rotation: i.rotation,
          silent: Dx(e),
          z2: 1,
          tooltip: _ && _.show ? o({
            content: n,
            formatter: function() {
              return n
            },
            formatterParams: w
          },
          _) : null
        });
        Wa(b.style, s, {
          text: y,
          textFont: p,
          textFill: s.getTextColor() || e.get("axisLine.lineStyle.color"),
          textAlign: s.get("align") || i.textAlign,
          textVerticalAlign: s.get("verticalAlign") || i.textVerticalAlign
        }),
        e.get("triggerEvent") && (b.eventData = kx(e), b.eventData.targetType = "axisName", b.eventData.name = n),
        this._dumbGroup.add(b),
        b.updateTransform(),
        this.group.add(b),
        b.decomposeTransform()
      }
    }
  },
  kx = Tx.makeAxisEventDataBase = function(t) {
    var e = {
      componentType: t.mainType,
      componentIndex: t.componentIndex
    };
    return e[t.mainType + "Index"] = t.componentIndex,
    e
  },
  Ix = Tx.innerTextLayout = function(t, e, n) {
    var i, r, a = ko(e - t);
    return Io(a) ? (r = n > 0 ? "top": "bottom", i = "center") : Io(a - Sx) ? (r = n > 0 ? "bottom": "top", i = "center") : (r = "middle", i = a > 0 && Sx > a ? n > 0 ? "right": "left": n > 0 ? "left": "right"),
    {
      rotation: a,
      textAlign: i,
      textVerticalAlign: r
    }
  },
  Dx = Tx.isLabelSilent = function(t) {
    var e = t.get("tooltip");
    return t.get("silent") || !(t.get("triggerEvent") || e && e.show)
  },
  Ax = ku({
    type: "axis",
    _axisPointer: null,
    axisPointerClass: null,
    render: function(t, e, n, i) {
      this.axisPointerClass && Vc(t),
      Ax.superApply(this, "render", arguments),
      Uc(this, t, e, n, i, !0)
    },
    updateAxisPointer: function(t, e, n, i) {
      Uc(this, t, e, n, i, !1)
    },
    remove: function(t, e) {
      var n = this._axisPointer;
      n && n.remove(e),
      Ax.superApply(this, "remove", arguments)
    },
    dispose: function(t, e) {
      Yc(this, e),
      Ax.superApply(this, "dispose", arguments)
    }
  }),
  Lx = [];
  Ax.registerAxisPointerClass = function(t, e) {
    Lx[t] = e
  },
  Ax.getAxisPointerClass = function(t) {
    return t && Lx[t]
  };
  var Px = ["axisLine", "axisTickLabel", "axisName"],
  Ox = ["splitArea", "splitLine", "minorSplitLine"],
  Ex = Ax.extend({
    type: "cartesianAxis",
    axisPointerClass: "CartesianAxisPointer",
    render: function(t, e, n, i) {
      this.group.removeAll();
      var r = this._axisGroup;
      if (this._axisGroup = new pd, this.group.add(this._axisGroup), t.get("show")) {
        var a = t.getCoordSysModel(),
        o = jc(a, t),
        s = new Tx(t, o);
        d(Px, s.add, s),
        this._axisGroup.add(s.getGroup()),
        d(Ox,
        function(e) {
          t.get(e + ".show") && this["_" + e](t, a)
        },
        this),
        io(r, this._axisGroup, t),
        Ex.superCall(this, "render", t, e, n, i)
      }
    },
    remove: function() {
      $c(this)
    },
    _splitLine: function(t, e) {
      var n = t.axis;
      if (!n.scale.isBlank()) {
        var i = t.getModel("splitLine"),
        r = i.getModel("lineStyle"),
        a = r.get("color");
        a = x(a) ? a: [a];
        for (var o = e.coordinateSystem.getRect(), l = n.isHorizontal(), u = 0, h = n.getTicksCoords({
          tickModel: i
        }), c = [], f = [], d = r.getLineStyle(), p = 0; p < h.length; p++) {
          var g = n.toGlobalCoord(h[p].coord);
          l ? (c[0] = g, c[1] = o.y, f[0] = g, f[1] = o.y + o.height) : (c[0] = o.x, c[1] = g, f[0] = o.x + o.width, f[1] = g);
          var v = u++%a.length,
          m = h[p].tickValue;
          this._axisGroup.add(new Gg({
            anid: null != m ? "line_" + h[p].tickValue: null,
            subPixelOptimize: !0,
            shape: {
              x1: c[0],
              y1: c[1],
              x2: f[0],
              y2: f[1]
            },
            style: s({
              stroke: a[v]
            },
            d),
            silent: !0
          }))
        }
      }
    },
    _minorSplitLine: function(t, e) {
      var n = t.axis,
      i = t.getModel("minorSplitLine"),
      r = i.getModel("lineStyle"),
      a = e.coordinateSystem.getRect(),
      o = n.isHorizontal(),
      s = n.getMinorTicksCoords();
      if (s.length) for (var l = [], u = [], h = r.getLineStyle(), c = 0; c < s.length; c++) for (var f = 0; f < s[c].length; f++) {
        var d = n.toGlobalCoord(s[c][f].coord);
        o ? (l[0] = d, l[1] = a.y, u[0] = d, u[1] = a.y + a.height) : (l[0] = a.x, l[1] = d, u[0] = a.x + a.width, u[1] = d),
        this._axisGroup.add(new Gg({
          anid: "minor_line_" + s[c][f].tickValue,
          subPixelOptimize: !0,
          shape: {
            x1: l[0],
            y1: l[1],
            x2: u[0],
            y2: u[1]
          },
          style: h,
          silent: !0
        }))
      }
    },
    _splitArea: function(t, e) {
      Zc(this, this._axisGroup, t, e)
    }
  });
  Ex.extend({
    type: "xAxis"
  }),
  Ex.extend({
    type: "yAxis"
  }),
  ku({
    type: "grid",
    render: function(t) {
      this.group.removeAll(),
      t.get("show") && this.group.add(new Vg({
        shape: t.coordinateSystem.getRect(),
        style: s({
          fill: t.get("backgroundColor")
        },
        t.getItemStyle()),
        silent: !0,
        z2: -1
      }))
    }
  }),
  vu(function(t) {
    t.xAxis && t.yAxis && !t.grid && (t.grid = {})
  }),
  t.version = hy,
  t.dependencies = cy,
  t.PRIORITY = Sy,
  t.init = uu,
  t.connect = hu,
  t.disConnect = cu,
  t.disconnect = Xy,
  t.dispose = fu,
  t.getInstanceByDom = du,
  t.getInstanceById = pu,
  t.registerTheme = gu,
  t.registerPreprocessor = vu,
  t.registerProcessor = mu,
  t.registerPostUpdate = yu,
  t.registerAction = _u,
  t.registerCoordinateSystem = xu,
  t.getCoordinateSystemDimensions = wu,
  t.registerLayout = bu,
  t.registerVisual = Mu,
  t.registerLoading = Tu,
  t.extendComponentModel = Cu,
  t.extendComponentView = ku,
  t.extendSeriesModel = Iu,
  t.extendChartView = Du,
  t.setCanvasCreator = Au,
  t.registerMap = Lu,
  t.getMap = Pu,
  t.dataTool = qy,
  t.zrender = fp,
  t.number = Mv,
  t.format = Av,
  t.throttle = pl,
  t.helper = U_,
  t.matrix = Rf,
  t.vector = wf,
  t.color = ed,
  t.parseGeoJSON = j_,
  t.parseGeoJson = K_,
  t.util = J_,
  t.graphic = tx,
  t.List = i_,
  t.Model = co,
  t.Axis = Q_,
  t.env = tf
});